我正在编写多线程ping程序。我在每个线程上创建了rawsockets(对于每个IP),并使用sendto()向每个线程发送ICMP Echo Request,然后在每个线程中执行recvfrom()。我从各种套接字的IP中获取消息(例如,如果我使用套接字S1用于IP1的sendto,我从IP1到S1,S2等回复回复)。我需要做绑定吗?
另一个问题是,即使我只发送1个ICMP请求,我也会收到许多来自目标的回应回复。有什么办法可以限制吗?这导致我错过了一些其他ICMP数据包。有没有办法让我的程序让目标停止发送ICMP echo?
谢谢,
答案 0 :(得分:3)
原始套接字接收所有传入的数据包;您需要进行自己的过滤,或者 - 更好的是 - 只打开一个原始套接字,并检测单个线程上的所有传入回应回复。
您的重复数据包可能是因为多个原始套接字 - 您将获得每个传入数据包的一个副本每个插槽。另请注意,在某些情况下,可以复制互联网数据包(但这种情况很少见)。