ip_len 设置为非常大的值
我有一个程序,将网络接口设置为混杂模式,创建一个接收所有传入数据包的套接字,然后进入循环将数据包读入缓冲区,设置指向 IP 标头位置的指针,然后打印其 ip_len 字段的值。问题是打印的值高得令人难以置信。 read()返回类似84的内容,程序将打印21504。我在Wireshark中检查了数据包大小,每个数据包的总大小与read()的返回值相差不远。我怎样才能让 ip_len 给我合理的数据?
I have a program that sets the network interface to promiscuous mode, creates a socket that receives all incoming packets, and then enters a loop to read a packet into a buffer, set a pointer to the location of the IP header, and then print the value of its ip_len field. The problem is that the printed values are impossibly high. The read() returns something like 84, and the program will print 21504. I checked the packet sizes in Wireshark, and the total size of each packet isn't very far from the return value of read(). How can I get ip_len to give me sane data?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这听起来像是一个字节顺序问题。 21504 是 0x5400,其字节交换后是 0x0054 = 84。请确保您使用 ntohs(ip_len) 来读取该值。
It sounds like an endianness issue. 21504 is 0x5400, which byte-swapped is 0x0054 = 84. Be sure you are using ntohs(ip_len) to read the value.