繁体   English   中英

使用 DPKT python 检查数据包是否包含 Ethe.net 层或原始 IP 数据包

[英]Check if packet contains Ethernet layer or a Raw IP packet using DPKT python

我有一些 pcap 文件,我需要从中提取一些信息,这些数据包是混合的,有些是 Raw IP,有些包含 ethe.net 帧。

我需要在解析之前有条件地检查数据包的类型,因为可以使用以下方法解析带有 ethe.net 帧的数据包:

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_ethe.net定义为 boolean 或条件?

pcap header 文件定义了捕获的链接类型(Ethe.net,Raw IP,...)

在处理数据包之前,您应该使用 dpkt.pcap.Reader() object 的 datalink() 来获取 pcap 文件的链接类型。 根据您的脚本示例:

if <<dpkt.pcap.Reader>>.datalink() == LINKTYPE_ETHE.NET: ## Process Ethe.net frame elif <<dpkt.pcap.Reader>>.datalink() == LINKTYPE_RAW: ## Processs Raw IP datagram else: ## Other link types

以下是链接类型列表: http://www.tcpdump.org/linktypes.html

Ethe.net 的值为 LINKTYPE_ETHE.NET,Raw 的值为 LINKTYPE_RAW IP

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM