PDA

View Full Version : three-way handshake con socket raw in c


guittone_bs
09-01-2007, 12:25
Ciao a tutti, ho un quesito per chi se ne intende di socket raw.
Sto cercando di implementare in C due programmini che facciano il three-way handshake del TCP, tuttavia quando provo ad eseguire i programmi (Alice e Bob), vedo che quando Bob riceve il SYN di Alice, fa partire un RST senza che nessuno glielo abbia detto, probabilmente è opera di linux.
Per chiarezza di seguito vi posto quello che succede:

tcpdump: listening on lo:0, link-type EN10MB (Ethernet),
capture size 96 bytes
13:05:12.822294 IP (tos 0x0, ttl 60, id 6062, offset 0, flags [none], proto: TCP (6), length: 40) localhost.2245 > 192.168.0.1.2212: S, cksum 0x5cce (correct), 1:1(0) win 512 Questo è il SYN inviato da Alice
13:05:14.325142 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto: TCP (6), length: 40) 192.168.0.1.2212 > localhost.2245: R, cksum 0x5ebb (correct), 0:0(0) ack 2 win 0 Questo è il RST inviato da Bob, peccato che nel codice del mio programma non sia previsto!


Come posso evitare questo inconveniente?

Inoltre vedo che se uso il comando socket(PF_INET, SOCK_RAW, IPPROTO_TCP), allora posso leggere il paccheto ricevuto con recvfrom() o read(), se invece creo il socket con socket(PF_INET, SOCK_RAW, IPPROTO_RAW), read() e recvfrom() non funzionano. Come mai?

Grazie a tutti per l'aiuto.

Ringrazio in anticipo per l'aiuto.