系统相关
首页 > 系统相关> > linux – libpcap – 从所有接口捕获数据包

linux – libpcap – 从所有接口捕获数据包

作者:互联网

我需要从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而不是任何,以获取这些数据包的以太网标头.

标签:pcap,linux,networking,network-protocols,libpcap
来源: https://codeday.me/bug/20190826/1731281.html