我正在编写一个多线程ping程序。我在每个线程(为每个IP)上创建了原始套接字,并使用sendto()向每个线程发送了ICMP Echo Request,然后在每个线程中执行了recvfrom()。我正在从各种套接字的IP中获取消息(例如,如果我已经将套接字S1用于IP1的sendto,那么我将从IP1得到回声回复到S1,S2等)。我需要绑定(bind)吗?

另一个问题是,即使我仅发送1个ICMP请求,我也从目标获得了许多回声回复。有什么办法可以限制我吗?这使我错过了其他一些ICMP数据包。我的程序是否有办法要求目标停止发送ICMP回声?

谢谢,

最佳答案

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

您的重复数据包可能是由于多个原始套接字造成的-每个套接字您将获得每个传入数据包的一份副本。还要注意,在某些情况下,Internet数据包可以重复(但是这种情况很少见)。

关于c - 创建PING程序时限制ICMP回显答复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6904135/

10-15 09:08