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

3
我需要从Linux机器上的所有网络接口中捕获数据包。 为了实现这一目标,我计划使用pcap_open_live() API,并将"any"作为设备参数传递。
我有不同类型的端口:以太网端口(比如eth0)和GRE隧道(比如tun0) 来自不同类型接口的数据包具有不同的头格式:
  1. 来自以太网端口的数据包带有MAC头
  2. 来自隧道的数据包带有Linux“cooked”捕获封装(16字节)头
pcap_loop()回调处理程序中,我如何检查收到的数据包的标题类型?
1个回答

7
你接收到的所有数据包都具有相同类型的数据包头,当你在pcap_t上调用pcap_datalink()时,你将获得这种类型。 pcap_datalink()返回的值是tcpdump.org网站上显示的DLT_值,即链路层头类型。
如果你打开了any设备,则pcap_datalink()将返回DLT_LINUX_SLL,这意味着你捕获的所有数据包都将具有“cooked”捕获头 - 即使是来自eth0的数据包! 你必须在eth0上进行捕获,而不是any,才能获取这些数据包的以太网头。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接