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

Dim*_*ima 3 linux networking network-protocols pcap libpcap

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

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

  1. 以太网端口的数据包具有MAC头
  2. 来自隧道的数据包带有Linux"熟"捕获封装(16字节)标头

如何检查pcap_loop()回调处理程序我得到了哪种类型的包头?

小智 6

您收到的所有数据包都获得相同类型的数据包标头; 这是你打电话pcap_datalink()给pcap_t 时得到的类型.该值pcap_datalink()返回是DLT_如图所示的数值链路层包头类型上tcpdump.org的网站页面.

如果您已打开any设备,pcap_datalink()将返回DLT_LINUX_SLL,这意味着您捕获的所有数据包将具有"熟"捕获标头 - 即使是来自eth0!您必须捕获eth0而不是any为这些数据包获取以太网标头.