使用DPKT python检查数据包是否包含以太网层或原始IP数据包

问题描述 投票:0回答:1

我有一些pcap文件,我需要从中提取一些信息,这些数据包是混合的,有些是Raw 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为布尔值还是条件?

python packet pcap dpkt
1个回答
0
投票

pcap头文件定义捕获的链接类型(以太网,原始IP,...)

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

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

这里是链接类型的列表:http://www.tcpdump.org/linktypes.html

对于以太网,使用值LINKTYPE_ETHERNET,对于原始IP,则使用LINKTYPE_RAW

© www.soinside.com 2019 - 2024. All rights reserved.