我编写了一个程序,它使用套接字捕获网络接口上的数据包。首先,我使用 gethostbyname 收集我机器的所有IP,然后使用 SOCK_RAW , IPPROTO_IP 和 SIO_RCVALL <将原始套接字绑定到每个IP / strong>选项。在适当的套接字上调用 recv 的每个IP都会执行一个线程(每个ip都有一个套接字)。这个程序工作正常。
但我找到了一个名为 INADDR_ANY 的特殊地址。 MSDN说 SIO_RCVALL 不能与INADDR_ANY一起使用,它是here:
套接字也必须绑定到 显式本地IPv4或IPv6接口, 这意味着你无法绑定 INADDR_ANY或in6addr_any。
是否可以使用一个套接字监视和捕获所有数据包(与本地计算机相关的数据包而不是其他计算机的数据包)?
由于
答案 0 :(得分:2)
INADDR_ANY
表示“我不关心哪个本地地址”,不“所有本地地址。”
如果应用程序不关心分配了哪个本地地址,请为 {{中的IPv6本地地址指定常量值
INADDR_ANY
或为IPv6本地地址指定常量值in6addr_any
1}} name 参数的成员。这允许底层服务提供商使用任何适当的网络地址,可能在存在多宿主主机(即具有多个网络接口和地址的主机)的情况下简化应用程序编程。