3

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

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

谢谢,

4

1 回答 1

3

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

您的重复数据包可能是由于多个原始套接字 - 每个套接字您将获得每个传入数据包的一份副本。另请注意,在某些情况下,互联网数据包可能会被复制(但是这种情况很少见)。

于 2011-08-01T20:41:58.780 回答