2

我编写了一个程序,它使用套接字捕获网络接口上的数据包。首先,我使用gethostbyname收集我机器的所有 IP ,然后使用SOCK_RAWIPPROTO_IPSIO_RCVALL选项将原始套接字绑定到每个 IP 。为每个在适当的套接字上调用recv的IP 执行一个线程(每个 ip 一个套接字)。该程序运行良好。

但我找到了一个名为INADDR_ANY的特殊地址。MSDN 说SIO_RCVALL不能与 INADDR_ANY 一起使用,它在这里

套接字还必须绑定到显式本地 IPv4 或 IPv6 接口,这意味着您不能绑定到 INADDR_ANY 或 in6addr_any。

是否可以使用一个套接字监视和捕获所有数据包(与本地计算机相关的数据包,而不是其他计算机的数据包)?

谢谢

4

1 回答 1

2

INADDR_ANY意思是“我不在乎哪个本地地址”,而不是“所有本地地址”。

来自MSDN

如果应用程序不关心分配的本地地址,请在name参数的成员中指定INADDR_ANYIPv4 本地地址的常量值或in6addr_anyIPv6 本地地址的常量值。这允许底层服务提供商使用任何适当的网络地址,潜在地简化存在多宿主主机(即具有多个网络接口和地址的主机)的应用程序编程。sa_data

于 2011-03-07T14:48:36.217 回答