2010-10-21 3 views
2

J'écris un programme pour surveiller le trafic FTP à l'aide de sockets raw. Maintenant, je suis en mesure de déterminer début des données dans le paquet TCP en utilisant ce code:Comment déterminer le début de la charge utile de données dans le paquet TCP?

// char * packet; 
// struct * iphdr; 
// struct * tcphdr; 

// ... 
// check, whether sniffed ethernet frame contains IP and TCP 


char * data; 
data = (packet + sizeof (struct ethhdr) + sizeof (struct tcphdr) + (header_ip->ihl * 4) + header_tcp->doff) + 4; 

Cela fonctionne très bien, mais je dois ajouter le nombre « magique » 4 pointeur de données. Sans l'ajouter, la chaîne finale commence avec peu de caractères sans signification.

Existe-t-il une solution propre pour déterminer le début des données transférées? (sans utiliser de bibliothèques spécialisées telles que libcap, etc.)

Merci.

+0

Qu'est-ce que vous voulez dire par 'struct tcphdr'? – Dummy00001

Répondre

2

Vérifiez les spécifications d'en-tête dans RFC 793, RFC 1122 et RFC 3168. Certains des drapeaux affectent la taille de l'en-tête, plus évidemment les champs options et champs de taille maximale.

Questions connexes