gpt4 book ai didi

Linux原始数据链路层套接字仅返回部分数据包(96字节)

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:29 25 4
gpt4 key购买 nike

在我的应用程序中,我使用原始套接字(类型PF_PACKET,SOCK_RAW)在数据链路层接收数据包。我发现我只能获取任何数据包的前 96 个字节。我假设某个地方有一些选项阻止我接收整个数据包,但是什么?这是我的代码的片段:

int sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));
int nBytesRead = read(sock, (char *) buf, 1500);
int nFlags = fcntl(m_sock, F_GETFL, 0); // make it non-blocking
fcntl(sock, F_SETFL, nFlags | O_NONBLOCK);

nBytesRead 永远不会超过 96,即使我的网络嗅探器显示更长的数据包。如果这有什么不同的话,那就是 uClinux。我在 http://www.network-builders.com/raw-socket-captures-only-first-96-bytes-packet-t57283.html 发现其他人也有同样的问题但没有答案。

最佳答案

解决了!我在原来的帖子中没有提到的是,我在原始套接字上附加了一个过滤器,因此它只会接收某些 TCP/IP 端口上的流量。该过滤器代码是使用 TCPDUMP 创建的,显然默认情况下将捕获限制为 96 字节。我必须将 -s0 选项添加到我的 TCPDUMP 命令行中以告诉它捕获所有内容:tcpdump -dd -s0“ip 和 tcp 以及目标端口 60001”

经过这一更改,它现在为我提供了完整的数据包。感谢this blog post为线索。希望这对将来的其他人有帮助。

关于Linux原始数据链路层套接字仅返回部分数据包(96字节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com