我有一个特定的网卡(NetFPGA),它在ICMP Echo Reply数据包的末尾添加一个8字节的时间戳(忽略校验和)。当我尝试以这种方式读取原始套接字中的数据包时:
recvsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
我只获得了没有添加时间戳的IP + ICMP数据。 我试过了:
recvsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP));
这样我得到了所有东西,我无法绑定任何地址。 还尝试过:
recvsock = socket(AF_INET, SOCK_RAW, htons(ETH_P_IP));
但没有抓到任何东西..
任何想法如何打开一个原始套接字,它只会捕获特定的ICMP回应应答包,但不会省略添加的8字节时间戳?
感谢
IDO
答案 0 :(得分:0)
从我发现的内容显然无法捕获原始套接字中的完整数据包,仍然让套接字为您进行过滤。我必须做的就是以这种方式打开套接字:
recvsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP));
用于捕获所有传入的IP数据包,然后根据libpcap过滤功能过滤掉我的ICMP数据包。