[2].TCP (Trasmission Control Protocol) /IP ( Internet Protocol )
Il protocollo TCP viene usato nelle connessioni più comuni, per esempio i protocolli ftp, telnet,
http, smtp, pop3 vengono gestiti dal protocollo TCP perché più sicuro, infatti come vedremo se
dovremmo attuare dello spoofing cieco le possibilità di "azzeccare" due campi da 32 Bits (Non
sto scherzando, con lo spoofing cieco sui protocolli TCP dovremmo proprio indovinare 2 numeri
a 32 Bits :-P ) sono minime.
Il protocollo IP viene utilizzare per il routing dei pacchetti, di fatti l'header di questo protocollo
contiene informazioni come l'indirizzo ip sorgente (l'ip assegnato allanostra macchina dal
providier) e l'indirizzo ip di destinazione, questo protocollo non è affatto sicuro dato che non
viene controllata l'originalità degli indirizzi. L'insieme IP/TCP permette l'indirizzamento dei
pacchetti ed un controllo sugli stessi. Per prima cosa dobbiamo conoscere il protocollo TCP/IP
che è in realtà è un insieme di protocolli (TCP e IP). La struttura del header del protocollo TCP
è la seguente:
tcphdr.h - Inizio
struct tcphdr{
unsigned short portasorgente;
unsigned short portadestinazione;
unsigned long s_seq;
unsigned long s_ack;
unsigned short res1:4;
unsigned short doff:4;
unsigned short fin:1;
unsigned short syn:1;
unsigned short rst:1;
unsigned short psh:1;
unsigned short ack:1;
unsigned short urg:1;
unsigned short res2:2;
unsigned short window;
unsigned short cksum;
unsigned short urg_ptr;
};
tcphdr.h – Fine
mentre la struttura di un header IP è la seguente:
iphdr.h - Inizio
struct iphdr{
unsigned int ihl:4;
unsigned int versione:4;
unsigned char servizio;
unsigned short lunghe zza;
unsigned short id;
unsigned short frag_off;
unsigned char tempodivita;
unsigned char protocollo;
unsigned short cksum;
unsigned long indirizzosorgente;
unsigned long indirizzodestinazione;
};
iphdr.h - Fine
Analizziamo i campi del header TCP:
porta sorgente: la porta da cui viene trasmesso il pacchetto.
porta destinazione: la porta di destinazione.
s_seq: primo numero di controllo
s_ack: secondo numero di controllo
res: Rerserved - Riservato.
doff: Data Offset - Offset dei dati
Dopo vengono i flag:
fin: Finished - indica se la connessione di origine termina la connessione.
syn: Synchronise - Viene utilizzata per l'inizializzazione di una connessione, determina la
sincronizzazione dei seq e ack.
rst: Reset - (Connection broken :-) ) termina la connessione all'istante.
psh: Push - indica se i dati devono esssere salvati in memoria.
ack: Acknowledge - indica i dati inviati dal peer.
urg: Urgent - indica la priorità del pacchetto.
res2: Reserved 2 - Riservato.
window: dimensione della finestra (non ci interessa).
cksum: controllo del pacchetto.
urg_ptr: Urgent Pointer (non ci interessa).
| <Pag 1 |