【问题标题】:Sniff all network interfaces嗅探所有网络接口
【发布时间】:2011-07-10 09:41:31
【问题描述】:

我编写了一个程序,它使用套接字捕获网络接口上的数据包。首先,我使用 gethostbyname 收集我机器的所有 IP,然后使用 SOCK_RAWIPPROTO_IPSIO_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


【解决方案1】:

INADDR_ANY 表示“我不在乎哪个本地地址”,不是“所有本地地址。”

来自MSDN

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

【讨论】:

  • 那么 OP 是否可以使用绑定到 INADDR_ANY 的 RAW 套接字捕获所有接收和发送的数据包?
猜你喜欢
  • 1970-01-01
  • 2016-05-28
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多