嗅探所有网络接口

时间:2011-03-07 14:30:02

标签: sockets networking sniffing

我编写了一个程序,它使用套接字捕获网络接口上的数据包。首先,我使用 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。

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

由于

1 个答案:

答案 0 :(得分:2)

INADDR_ANY表示“我不关心哪个本地地址”,“所有本地地址。”

来自MSDN

  

如果应用程序不关心分配了哪个本地地址,请为 {{中的IPv6本地地址指定常量值INADDR_ANY或为IPv6本地地址指定常量值in6addr_any 1}} name 参数的成员。这允许底层服务提供商使用任何适当的网络地址,可能在存在多宿主主机(即具有多个网络接口和地址的主机)的情况下简化应用程序编程。