2009-08-22 6 views
0

Ich habe ein Programm, das die Netzwerkschnittstelle auf Promiscuous-Modus setzt, erstellt einen Socket, der alle eingehenden Pakete empfängt und dann eine Schleife eingibt, um ein Paket in einen Puffer zu lesen, einen Zeiger auf den Speicherort festlegen des IP-Headers und dann den Wert seines ip_len-Feldes. Das Problem ist, dass die gedruckten Werte unmöglich hoch sind. Die Funktion read() gibt etwa 84 zurück, und das Programm druckt 21504. Ich überprüfte die Paketgrößen in Wireshark, und die Gesamtgröße jedes Pakets ist nicht sehr weit vom Rückgabewert von read() entfernt. Wie kann ich ip_len bekommen, um mir vernünftige Daten zu geben?ip_len auf sehr große Werte eingestellt

Antwort

2

Es klingt wie ein Endianness-Problem. 21504 ist 0x5400, Byte-vertauscht ist 0x0054 = 84. Stellen Sie sicher, dass Sie ntohs (ip_len) verwenden, um den Wert zu lesen.

+0

Ich war nicht. Vielen Dank! – computergeek6