利用dp解析PPPoE数据包

2024-04-29 10:52:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用dpkt库从pcap文件列表中检索5元组信息。为了解析带有VLAN标记的PPPoE数据包,我编写如下代码(仅供测试):

import dpkt
import socket

def decode(pc):
    for ts, pkt in pc:
        eth = dpkt.ethernet.Ethernet(pkt)
        pppoe = dpkt.pppoe.PPPoE(eth.data)
        ip = pppoe.data
        if ip.p == dpkt.ip.IP_PROTO_UDP:
            udp = ip.data
            yield(ip.src, udp.sport, ip.dst, udp.dport, ip.v)
        else: pass

def test():
    pc = dpkt.pcap.Reader(open('epon.pcap','rb'))
    for src, sport, dst, dport, ip_version in decode(pc):
        print "from", socket.inet_ntoa(src),":",sport, " to ",socket.inet_ntoa(dst),":",dport

test()

结果是错误,这意味着解析错误:

^{pr2}$

那么正确的代码应该是什么样的呢?我是一个Python初学者,dpkt的源代码真的让我很困惑。。。在


Tags: 代码importipsrcdatapcapsocketdst
1条回答
网友
1楼 · 发布于 2024-04-29 10:52:23

您的捕获在vlan(堆叠vlan)中有一个vlan。在

如果不修改dpkt库,则需要手动解析第二个VLAN。在

另一个问题是pppoe的有效负载是ppp而不是ip。在

您可以将代码更改为如下所示:

import struct

。。。在

^{pr2}$

相关问题 更多 >