首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用dpkt (python)提取大多数diameter AVP

无法使用dpkt (python)提取大多数diameter AVP
EN

Stack Overflow用户
提问于 2013-06-28 17:40:37
回答 1查看 726关注 0票数 0

我需要从diameter数据包中提取所有AVPs详细信息。目前我正在为Python使用dpkt lib,但我发现它并不支持提取所有的AVP。

在标头级别,仅支持以下内容

代码语言:javascript
复制
class Diameter(dpkt.Packet):
    __hdr__ = (
        ('v', 'B', 1),
        ('len', '3s', 0),
        ('flags', 'B', 0),
        ('cmd', '3s', 0),
        ('app_id', 'I', 0),
        ('hop_id', 'I', 0),
        ('end_id', 'I', 0)
        )

在AVP级别,支持,其余的AVP被存储为二进制数据(如果我没有错的话)

代码语言:javascript
复制
class AVP(dpkt.Packet):
    __hdr__ = (
        ('code', 'I', 0),
        ('flags', 'B', 0),
        ('len', '3s', 0),
        )

import dpkt

f = open('snoop.pcap','r')
pcap = dpkt.pcap.Reader(f)


for ts, buf in pcap:
    eth = dpkt.ethernet.Ethernet(buf)
    ip = eth.data
    tcp = ip.data
    dia = dpkt.diameter.Diameter(tcp.data)
    avp = dpkt.diameter.AVP(tcp.data)
    if tcp.dport == 3868 and len(tcp.data) > 0:
        print (str(dia.cmd) + ' ' + str(dia.hop_id) + ' ' + str(dia.end_id) + ' ' + str(avp.code))

f.close() 

有没有其他库比dpkt或任何其他方法更好地使用这个库来提取AVP?

版本: dpkt 1.8

EN

回答 1

Stack Overflow用户

发布于 2014-02-11 18:48:01

dpkt的Diameter解析器有一个错误(从版本89开始)。

此填充未实现。如下所示修改diameter.py :在AVP类的unpack()方法中(第119行),添加:

代码语言:javascript
复制
self.padding = ( 4 - self.len % 4 ) % 4

在AVP类的__len__()方法(第140行)中,添加:

代码语言:javascript
复制
length += self.padding

这些修改为我解决了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17361716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档