python分析数据包_dpkt解析数据包

我试了 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值