2009-08-22 6 views
0

J'ai un programme qui définit l'interface réseau en mode promiscuous, crée un socket qui reçoit tous les paquets entrants, puis entre dans une boucle pour lire un paquet dans un tampon, placez un pointeur sur l'emplacement de l'en-tête IP, puis imprimez la valeur de son champ ip_len. Le problème est que les valeurs imprimées sont incroyablement élevées. Read() retourne quelque chose comme 84, et le programme va imprimer 21504. J'ai vérifié les tailles de paquet dans Wireshark, et la taille totale de chaque paquet n'est pas très loin de la valeur de retour de read(). Comment puis-je obtenir ip_len pour me donner des données saines?ip_len défini sur de très grandes valeurs

Répondre

2

Cela ressemble à un problème d'endianness. 21504 est 0x5400, lequel octet-permuté est 0x0054 = 84. Assurez-vous que vous utilisez ntohs (ip_len) pour lire la valeur.

+0

Je n'étais pas. Merci! – computergeek6

Questions connexes