【发布时间】:2011-07-10 09:41:31
【问题描述】:
我编写了一个程序,它使用套接字捕获网络接口上的数据包。首先,我使用 gethostbyname 收集我机器的所有 IP,然后使用 SOCK_RAW、IPPROTO_IP 和 SIO_RCVALL 选项。为每个在适当的套接字上调用 recv 的 IP 执行一个线程(每个 ip 一个套接字)。该程序运行良好。
但我找到了一个名为 INADDR_ANY 的特殊地址。 MSDN 说 SIO_RCVALL 不能与 INADDR_ANY 一起使用,它是 here:
套接字也必须绑定到一个 显式本地 IPv4 或 IPv6 接口, 这意味着你不能绑定到 INADDR_ANY 或 in6addr_any。
是否可以通过一个套接字监控和捕获所有数据包(与本地计算机相关的数据包,而不是与其他计算机相关的数据包)?
谢谢
【问题讨论】:
-
这和你之前的问题差不多吗? stackoverflow.com/questions/5217827/inaddr-any-details你为什么不直接编辑?
-
不一样!你知道其中任何一个的答案吗?
-
请记住,使用类型 IPPROTO_IP 的原始套接字将仅收集 IP 流量。它不会收集其他网络级别的协议,例如 ICMP、IGMP 等,或较低级别的协议,例如 ARP。如果您尝试生成网络统计信息,则需要使用 pcap 库之类的东西,该库将从网络中获取所有内容。
标签: sockets networking sniffing