ip_len 设置为非常大的值

发布于 2024-08-02 19:51:09 字数 207 浏览 6 评论 0原文

我有一个程序,将网络接口设置为混杂模式,创建一个接收所有传入数据包的套接字,然后进入循环将数据包读入缓冲区,设置指向 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦魇绽荼蘼 2024-08-09 19:51:09

这听起来像是一个字节顺序问题。 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文