我需要从Linux机器上的所有网络接口捕获数据包。
为了做到这一点,我计划使用pcap_open_live()
API并传递"任何"作为设备参数。
我有不同类型的端口:以太网端口(比如eth0)和GRE隧道(比如tun0) 来自不同类型接口的数据包具有不同的报头格式:
如何检查pcap_loop()
回调处理程序我得到了哪种类型的数据包标头?
答案 0 :(得分:6)
您收到的所有数据包都会获得相同类型的数据包标头;这是您在pcap_t上调用pcap_datalink()
时获得的类型。 pcap_datalink()
返回的值是DLT_
值,如tcpdump.org网站上的Link-Layer Header Types页面所示。
如果您已打开any
设备,则pcap_datalink()
将返回DLT_LINUX_SLL
,这意味着您捕获的所有数据包将具有“熟”捕获标头 - 甚至来自eth0
的人!您必须在eth0
而不是any
上捕获,以获取这些数据包的以太网标头。