我需要从Linux机器上的所有网络接口捕获数据包.
为了做到这一点,我打算使用pcap_open_live()API并将“any”作为设备参数传递.
我有不同类型的端口:以太网端口(比如eth0)和GRE隧道(比如tun0)
来自不同类型接口的数据包具有不同的标头格式:
>以太网端口的数据包具有MAC头
>来自隧道的数据包带有Linux“熟”捕获封装(16字节)标头
我如何检查pcap_loop()回调处理程序我得到了什么类型的包头?
解决方法:
您收到的所有数据包都获得相同类型的数据包标头;这是你在pcap_t上调用pcap_datalink()时得到的类型. pcap_datalink()返回的值是DLT_值,如tcpdump.org站点上的Link-Layer Header Types页面所示.
如果您打开了任何设备,pcap_datalink()将返回DLT_LINUX_SLL,这意味着您捕获的所有数据包都将具有“熟”捕获标头 – 即使是来自eth0的标头!您必须捕获eth0而不是任何,以获取这些数据包的以太网标头.