1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
int sendrawtcppingquery(int rawsd, struct eth_nfo *eth, Target *target, int pingtype, u16 probe_port,
u16 seq, struct timeval *time, struct pingtune *pt) {
int trynum = 0;
int myseq;
unsigned short sportbase;
unsigned long myack;
if (o.magic_port_set) sportbase = o.magic_port;
else {
sportbase = o.magic_port + 20;
trynum = seq % pt->max_tries;
}
myseq = (get_random_uint() << 22) + (seq << 6) + 0x1E;
/* (response & 0x3F) better be 0x1E or 0x1F */
myack = (get_random_uint() << 22) + (seq << 6) + 0x1E;
/* (response & 0x3F) better be 0x1E or 0x1F */
o.decoys[o.decoyturn].s_addr = target->v4source().s_addr;
if (pingtype & PINGTYPE_TCP_USE_SYN) {
send_tcp_raw_decoys( rawsd, eth, target->v4hostip(), o.ttl, sportbase + trynum,
probe_port, myseq, myack, TH_SYN, 0, (u8 *) "\x02\x04\x05\xb4", 4, o.extra_payload,
o.extra_payload_length);
} else {
send_tcp_raw_decoys( rawsd, eth, target->v4hostip(), o.ttl, sportbase + trynum,
probe_port, myseq, myack, TH_ACK, 0, NULL, 0, o.extra_payload,
o.extra_payload_length);
}
return 0;
}
|