libpcap - 从所有接口捕获数据包

时间:2012-01-24 23:18:25

标签: linux networking network-protocols pcap libpcap

我需要从Linux机器上的所有网络接口捕获数据包。 为了做到这一点,我计划使用pcap_open_live() API并传递"任何"作为设备参数。

我有不同类型的端口:以太网端口(比如eth0)和GRE隧道(比如tun0) 来自不同类型接口的数据包具有不同的报头格式:

  1. 以太网端口的数据包具有MAC头
  2. 来自隧道的数据包来自Linux" cooked"捕获封装(16字节)标题
  3. 如何检查pcap_loop()回调处理程序我得到了哪种类型的数据包标头?

1 个答案:

答案 0 :(得分:6)

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

如果您已打开any设备,则pcap_datalink()将返回DLT_LINUX_SLL,这意味着您捕获的所有数据包将具有“熟”捕获标头 - 甚至来自eth0的人!您必须在eth0而不是any上捕获,以获取这些数据包的以太网标头。