1

我有一个特定的网卡 (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 字节时间戳?

谢谢
伊多

4

1 回答 1

0

从我发现的情况来看,显然没有办法在原始套接字中捕获完整的数据包,并且仍然让套接字为您进行过滤。我所要做的就是以这种方式打开一个套接字:

recvsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP));

用于捕获所有传入的 IP 数据包,然后根据 libpcap 过滤功能过滤掉我的 ICMP 数据包。

于 2013-10-28T13:03:18.763 回答