我需要从 Linux 机器上的所有网络接口捕获数据包。
为了做到这一点,我计划使用pcap_open_live()
API 并传递“any”作为设备参数。
我有不同类型的端口:以太网端口(例如 eth0)和 GRE 隧道(例如 tun0)
来自不同类型接口的数据包具有不同的标头格式:
- 来自以太网端口的数据包带有 MAC 标头
- 来自隧道的数据包带有 Linux“熟”捕获封装(16 字节)标头
我怎样才能登记入住pcap_loop()
回调处理程序我得到什么类型的数据包标头?
您收到的所有数据包都具有相同类型的数据包标头;这就是你打电话时得到的类型pcap_datalink()
在 pcap_t 上。的价值观pcap_datalink()
回报是DLT_
值如所示链路层报头类型tcpdump.org 站点上的页面。
如果您已经打开了any
设备,pcap_datalink()
将返回DLT_LINUX_SLL
, 意思是ALL您捕获的数据包将具有“煮熟的”捕获标头 - 即使是来自eth0
!你必须捕捉eth0
, 而不是any
,获取这些数据包的以太网标头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)