2012-01-24 54 views
3

我需要从Linux机器上的所有网络接口捕获数据包。 为了做到这一点,我打算使用pcap_open_live() API并将“any”作为设备参数。libpcap - 从所有接口捕获数据包

我有不同类型的端口:以太网端口(比如为eth0)和GRE隧道(说TUN0) ,从不同类型的接口来都有不同的头格式的报文:

  1. 数据包从以太网端口有MAC报头由隧道
  2. 包与Linux的“熟”捕捉封装(16个字节)头

未来如何检查到pcap_loop()回调处理什么类型的数据包报头的 我有?

回答

6

您收到的所有数据包都获得相同类型的数据包标题;这是您在pcap_t上致电pcap_datalink()时获得的类型。 pcap_datalink()返回的值是DLT_值,如tcpdump.org网站上的Link-Layer Header Types页面所示。

如果你已经打开了any设备,pcap_datalink()将返回DLT_LINUX_SLL,这意味着ALL包您捕捉会有“夹生”捕获头 - 甚至从eth0的人!您必须捕获eth0而不是any,以获取这些数据包的以太网标头。

相关问题