dpkt解析数据包

发布于 2022-09-11 19:17:14 字数 640 浏览 44 评论 0

问题描述:
我用python抓包,数据包格式是TCP包用GRE包了一层,用dpkt可以解析,结果抓包的目标交换机系统版本变动了,所以包虽然还是那个包,却多了一层ERSPAN的东西,然后就解析不了了,看图:
图片描述

图片描述
老版本可以解析,但是新版本到Encapsulated Remote Switch Packet ANalysis Type I这一层就往下解析不了了,我之前用的wireShark解析,也解析不了,然后升级了wireShark后可以解析了

# 获取以太网部分数据
Ethernet_pack = dpkt.ethernet.Ethernet(buf)
# 协议类型 25944,35006
ptype = Ethernet_pack.data.data.p

要获取每一层数据用.data就可以了,但是新版本的这种格式解析不了

dpkt有没有办法解析这种数据包?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

愚人国度 2022-09-18 19:17:14

我试了 dpkt 是可以的。
解析文件 2019_0416_1558_38.pcap 第一个报文是成功的,与 WireShark 展示一致。

#coding=utf-8

import os
import sys

from dpkt.ip import IP
from dpkt.pcap import Reader as PReader
from dpkt.ethernet import Ethernet
from socket import inet_ntop
from socket import AF_INET

curpath = os.path.dirname(os.path.realpath(__file__))

import dpkt
print("dpkt.__version__= {}".format(dpkt.__version__))

def main():



    p = "2019_0416_1558_38.pcap"
    p = os.path.join(curpath, p)

    cnt = 0

    with open(p, "rb") as fr:
        rd = PReader(fr)
        for pkt in rd:
            cnt+=1
            # bs is str
            bs = pkt[1]
            eth = Ethernet(bs)

            ip = eth.ip.gre.ethernet.ip
            tcp = ip.tcp
            print("[{}]{}->{}  {}->{}".format(
                cnt,
                inet_ntop(AF_INET, ip.src),
                inet_ntop(AF_INET, ip.dst),
                tcp.sport, tcp.dport))
            
            if cnt > 10:
                break

    print("main exit")


if __name__ == '__main__':
    main()

因为要解析 GRE.proto = (ETH_TYPE_ERSPAN1 = 0x88be),现有dpkt (1.9.2) 不支持此协议,因此要仿照此次 commit https://github.com/kbandla/dp... 增加 patch

ETH_TYPE_ERSPAN1 = 0x88be
...
Ethernet.set_type(ETH_TYPE_ERSPAN1, Ethernet)

然后就成功解析了。

输出


dpkt.__version__= 1.9.2
[1]10.126.44.15->10.120.50.5  63343->7191
[2]10.103.17.176->10.120.101.14  44589->80
[3]10.126.41.14->10.120.101.14  21632->80
[4]10.103.32.111->10.120.13.23  43223->9088
[5]10.120.182.22->10.120.91.61  26951->9088
[6]10.136.18.18->10.120.89.46  14273->4242
[7]10.120.175.36->10.120.186.25  39582->9504
[8]10.120.166.32->10.120.191.22  35683->9089
[9]10.103.32.112->10.120.163.33  52748->9089
[10]10.120.180.17->10.120.91.50  11881->9000
[11]10.126.51.16->10.120.91.17  31950->8193
main exit
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文