PDA

Visualizza la versione completa : Raw Socket C (solo unidirezionali?)


gianvio
25-09-2009, 10:11
Ciao a tutti.

Vi spiego in breve cosa ho fatto e qual'e' il mio problema. Mi serve uno script (in C) che intercetta il messaggio DHCP ACK che il server DHCP (su linux) invia al client dopo avergli assegnato un indirizzo IP. Questo script deve girare sullo stesso server su chi gira il processo "dhcpd".
Per fare questo (dopo un po' di :dh: ) ho utilizzato una socket RAW, che ascolta il traffico UDP della scheda di rete. Sembra funzionare, nel senso che riesco a vedere del traffico che passa e ad estrapolare delle informazioni utili (porta sorgente, porta destinazione e quant'altro).

Il problema pero' e' questo: dopo un po' di verifiche mi sono accorto che con questo meccanismo riesco ad intercettare solo il traffico che dall'esterno arriva alla mia scheda di rete e non il traffico che questa produce verso l'esterno. Faccio un esempio: se dal server lancio un ping verso un IP esterno, il mio script non rileva gli echo request (server -> esterno) ma solo gli echo reply (esterno -> server).

Quello che in realta' mi occorre fare e' di poter leggere anchere il traffico in uscita dalla scheda, in quanto il messaggio DHCP e' inviato dal server al client a seguito della assegnazione. Cosi' come e' fatto ora, lo script non lo intercettera' mai.

Domanda: la socket raw e' di suo unidirezionale o esiste un modo per renderla "bidirezionale"?
Suggerimenti alternativi?

Grazie 1000
Giancarlo

billiejoex
25-09-2009, 14:30
Non so rispondere alla tua domanda ma per fare questo genere di cose in genere sempre meglio utilizzare libpcap/winpcap.
Sono molto pi ad alto livello e semplici da usare rispetto ai RAW socket.

Loading