Oggi mi sono messo a combattere un pò con i Socket Raw, e ho quindi scritto un piccolo esempio per il loro utilizzo. In questo esempio viene mostrato come creare e inviare un pacchetto TCP/IP con flag SYN settato, in modo da dare inizio all'handshaking. Ricordo che l'handshake si compone di tre fasi:
1) invio di un pacchetto SYN da parte del client
2) invio del SYN-ACK da parte del server
3) invio del ACK da parte del client. Da questo punto in poi il canale viene aperto e client e server lo usano per la comunicazione.
Per maggiori dettagli del protocollo vi consiglio di dare uno sguardo su google, o ancora su qualche manuale di reti di calcolatori.
SOURCECODEDopo la compilazione del sourcecode si può lanciare il programma e verificare che il server rispondi con un SYN-ACK:
#TERMINALE 1
root@Side_Effect:/home/matrix86/Desktop# gcc -Wall -o sendsyn rawSocketExample2.c
root@Side_Effect:/home/matrix86/Desktop# ./sendsyn
Pacchetto inviato!
Exit.
#TERMINALE 2
root@Side_Effect:/home/matrix86/Desktop# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
15:24:41.561651 IP 192.168.0.101.5678 > 192.168.0.102.http: Flags [ S], seq 1, win 32767, length 0
15:24:41.562767 IP 192.168.0.102.http > 192.168.0.101.5678: Flags [S.], seq 2337696018, ack 2, win 8192, options [mss 1460], length 0
P.s.: ricordo che per l'uso dei socket Raw bisogna avere i permessi di amministrazione...