Beispiel #1
0
unsigned int
i_wanna_fuck_this_beauty(void *pi)
{
    unsigned char   *http   = get_http_ptr(pi);
    unsigned int    tdl     = get_tcp_data_len(pi);

    if(!http || !tdl) return false;
    if(http - get_pkt_ptr(pi) + 4 >= tdl) return false;


    if('G'==http[0] && 'E'==http[1] && 'T'==http[2] && ' '==http[3])
    {
#if 0
        static int i = 0;
        if(i) return false;
        struct _tcphdr  *tcp    = get_tcp_hdr(pi);
        struct _iphdr   *ip     = get_ip_hdr(pi);
        _MESSAGE_OUT("Hook one ip test !!! switch in file : %s:%d\n",
                            __FILE__, __LINE__ - 6);
        _MESSAGE_OUT("=============\nip.addr == %s && tcp.port == %u\n",
                            _netint32toip(ip->daddr), _ntoh16(tcp->source));
        i = 1;
#endif
        return true;
    }

    return false;
}
Beispiel #2
0
// return false to exit this stalker thread
unsigned int
stalker_callback(void *si, void *pi)
{
    // uri_logout(pi);
    // http_hdr_logout(pi);

    void    *tr = stalker_get_exptr(si);
    if(!tr)
    {
        struct _tcphdr  *tcp    = get_tcp_hdr(pi);
        tr  = tr_init_c2s(pi);
        if(!tr) return false;
        stalker_set_exptr(si, tr);
#if 1
        struct _iphdr   *ip     = get_ip_hdr(pi);
        _MESSAGE_OUT("\033[1mlog out switch in file : %s:%d\n",
                            __FILE__, __LINE__ - 3);
        _MESSAGE_OUT("ip.addr == %s && tcp.port == %u\033[0m\n",
                            _netint32toip(ip->daddr), _ntoh16(tcp->source));
#endif 
    }
    tr_receive(tr, pi);

    // route_packet(pi);
    pi_destory(pi);
    return true;
}
Beispiel #3
0
// in router thread ============================================================
unsigned int
follow_this_beauty(void *pi)
{
    struct _tcphdr  *tcp    = get_tcp_hdr(pi);
    if(0 == tcp) return false;

    if( (_ntoh16(80) == tcp->dest)
            ? tss_c2s_insert(tss, pi)
            : tss_s2c_insert(tss, pi) )
    {
        void    *si = stalker_create();
        if(!si) return false;
        stalker_set_callback(si, stalker_callback);
        return tss_set_stalker(tss, pi, si);
    }

    return false;
}
Beispiel #4
0
static packet*
rpk_unpack(decoder *d,int32_t *err)
{
	TYPE_HEAD     pk_len;
	uint32_t      pk_total,size;
	buffer_reader reader;
	rpacket      *rpk;
	if(err) *err = 0;

	if(d->size <= SIZE_HEAD)
		return NULL;

	buffer_reader_init(&reader,d->buff,d->pos);
	if(SIZE_HEAD != buffer_read(&reader,(char*)&pk_len,SIZE_HEAD))
		return NULL;
	pk_len = _ntoh16(pk_len);
	pk_total = pk_len + SIZE_HEAD;
	if(pk_total > d->max_packet_size){
		if(err) *err = DERR_TOOLARGE;
		return NULL;
	}
	if(pk_total > d->size)
		return NULL;

	rpk = rpacket_new(d->buff,d->pos);

	do{
		size = d->buff->size - d->pos;
		size = pk_total > size ? size:pk_total;
		d->pos    += size;
		pk_total  -= size;
		d->size -= size;
		if(d->pos >= d->buff->cap)
		{
			bytebuffer_set(&d->buff,d->buff->next);
			d->pos = 0;
			if(!d->buff){
				assert(pk_total == 0);
				break;
			}
		}
	}while(pk_total);
	return (packet*)rpk;
}