使用 DPKT python 检查数据包是否包含以太网层或原始 IP 数据包
Check if packet contains Ethernet layer or a Raw IP packet using DPKT python
我有一些 pcap 文件需要从中提取一些信息,这些数据包是混合的,一些是原始 IP,另一些包含以太网帧。
我需要在解析之前有条件地检查数据包的类型,因为带有以太网帧的数据包可以用以下方法解析:
for ts, buf in pkts:
if buf contains_ethernet:
eth = dpkt.ethernet.Ethernet(buf)
if eth.type == dpkt.ethernet.ETH_TYPE_IP:
ip = eth.data
else:
continue
else:
ip = dpkt.ip.IP(buf)
如何将 contains_ethernet
定义为布尔值或条件?
pcap 头文件定义了 link 捕获类型(以太网、原始 IP...)
在处理数据包之前,您应该使用 dpkt.pcap.Reader() 对象的数据link() 来获取 pcap 文件的 link 类型。根据您的脚本示例:
if <<dpkt.pcap.Reader>>.datalink() == LINKTYPE_ETHERNET:
## Process Ethernet frame
elif <<dpkt.pcap.Reader>>.datalink() == LINKTYPE_RAW:
## Processs Raw IP datagram
else:
## Other link types
这是 link 类型的列表:http://www.tcpdump.org/linktypes.html
以太网的值为 LINKTYPE_ETHERNET,原始 IP 的值为 LINKTYPE_RAW
我有一些 pcap 文件需要从中提取一些信息,这些数据包是混合的,一些是原始 IP,另一些包含以太网帧。
我需要在解析之前有条件地检查数据包的类型,因为带有以太网帧的数据包可以用以下方法解析:
for ts, buf in pkts:
if buf contains_ethernet:
eth = dpkt.ethernet.Ethernet(buf)
if eth.type == dpkt.ethernet.ETH_TYPE_IP:
ip = eth.data
else:
continue
else:
ip = dpkt.ip.IP(buf)
如何将 contains_ethernet
定义为布尔值或条件?
pcap 头文件定义了 link 捕获类型(以太网、原始 IP...)
在处理数据包之前,您应该使用 dpkt.pcap.Reader() 对象的数据link() 来获取 pcap 文件的 link 类型。根据您的脚本示例:
if <<dpkt.pcap.Reader>>.datalink() == LINKTYPE_ETHERNET:
## Process Ethernet frame
elif <<dpkt.pcap.Reader>>.datalink() == LINKTYPE_RAW:
## Processs Raw IP datagram
else:
## Other link types
这是 link 类型的列表:http://www.tcpdump.org/linktypes.html
以太网的值为 LINKTYPE_ETHERNET,原始 IP 的值为 LINKTYPE_RAW