创建PING程序时限制ICMP回应

我正在编写一个multithreadingping程序。 我在每个线程上创建了rawsockets(对于每个IP),并使用sendto()向每个线程发送ICMP Echo Request,然后在每个线程中执行recvfrom()。 我从各种套接字的IP中获取消息(如果我使用套接字S1用于IP1的sendto,我从IP1到S1,S2等回复回复)。 我需要做绑定吗?

另一个问题是,即使我只发送1个ICMP请求,我也会收到许多来自目标的回应回复。 有什么办法可以限制吗? 这导致我错过了一些其他ICMP数据包。 我的程序有没有办法让目标停止发送ICMP echo?

谢谢,

原始套接字接收所有传入的数据包; 您需要进行自己的过滤,或者 – 更好的是 – 只打开一个原始套接字,并在单个线程上检测所有传入的回应回复。

您的重复数据包可能是因为多个原始套接字 – 您将获得每个套接字的每个传入数据包的一个副本。 另请注意,在某些情况下,可以复制Internet数据包(但这种情况很少见)。