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