【问题标题】:libpcap - capture packets from all interfaceslibpcap - 从所有接口捕获数据包
【发布时间】:2012-02-18 05:24:47
【问题描述】:
我需要从 Linux 机器上的所有网络接口捕获数据包。
为了做到这一点,我打算使用pcap_open_live() API 并将“any”作为设备参数传递。
我有不同类型的端口:以太网端口(比如 eth0)和 GRE 隧道(比如 tun0)
来自不同类型接口的数据包有不同的头部格式:
- 来自以太网端口的数据包具有 MAC 标头
- 来自隧道的数据包带有 Linux“熟”捕获封装(16 字节)标头
如何查看pcap_loop() 回调处理程序我得到了什么类型的数据包头?
【问题讨论】:
标签:
linux
networking
network-protocols
pcap
libpcap
【解决方案1】:
您收到的所有数据包都获得相同类型的数据包头;这就是您在 pcap_t 上调用 pcap_datalink() 时得到的类型。 pcap_datalink() 返回的值是DLT_ 值,如 tcpdump.org 站点上的 Link-Layer Header Types 页面所示。
如果您打开了any 设备,pcap_datalink() 将返回 DLT_LINUX_SLL,这意味着您捕获的 ALL 数据包将具有“熟”捕获标头 - 甚至来自 @ 的数据包987654328@!您必须在 eth0 而不是 any 上进行捕获,才能获取这些数据包的以太网标头。