sc sn和解码直径

时间:2014-08-14 11:16:28

标签: python decode scapy

我正在尝试为Diameter消息执行scapy / python嗅探器并解析Diameter部分以从Raw.load获取AVP。 一些失败后,我回到基本的python / scapy脚本,如下所示:     来自scapy.all import *

def pkt_diam(pkt):
    raw = pkt.getlayer(Raw).load
    print raw
    # pkt.show()

sniff(iface="eth0", filter="port 3868", store=0, prn=pkt_diam)

通过打印raw.load,我收到了一些AVP,但非常难以理解。如果我使用     pkt.show() 我收到整个数据包,以太网,IP,TCP和原始部分,但Raw.load几乎无法使用。

###[ Raw ]###
        load      = '\x01\x00\x00\xec@\x00\x01/\x01\x00\x00\x00\x07K\x12\xca\x07K\x12\xca\x00\x00\x01\x07@\x00\x00 00000001;000001;61de2650\x00\x00\x01\x04@\x00\x00 \x00\x00\x01\n@\x00\x00\x0c\x00\x00(\xaf\x00\x00\x01\x02@\x00\x00\x0c\x01\x00\x00\x00\x00\x00\x01\x15@\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x01\x08@\x00\x00\x1dtest.a-server.org\x00\x00\x00\x00\x00\x01(@\x00\x00\x14a-server.org\x00\x00\x01)@\x00\x00 \x00\x00\x01\n@\x00\x00\x0c\x00\x00(\xaf\x00\x00\x01*@\x00\x00\x0c\x00\x00\x13\x89\x00\x00\x02t\x80\x00\x008\x00\x00(\xaf\x00\x00\x01\n@\x00\x00\x0c\x00\x00(\xaf\x00\x00\x02u\x80\x00\x00\x10\x00\x00(\xaf\x00\x00\x00\x01\x00\x00\x02v\x80\x00\x00\x10\x00\x00(\xaf\x00\x00\x00\x05'

我需要一些帮助来解析和解码Diameter Raw.load消息。 Thx提前

3 个答案:

答案 0 :(得分:0)

最好的方法是define the Diameter header yourself,按照我刚给你的链接,这是Scapy主要文档的一部分,详细介绍了如何构建自己的协议的分步指南type(header)。

一旦正确定义了Diameter()标头,解剖Diameter数据包将变得轻而易举。

wikipedia page on the Diameter protocol似乎是关于Diameter数据包标头的非常好的参考。

答案 1 :(得分:0)

作为当前Scapy pull请求https://bitbucket.org/secdev/scapy/pull-requests/的一部分,数字#109提供对Diameter层的支持(解析和生成)。

下载最新的Scapy源文件和diameter.py文件,该文件应放在“贡献”目录中(此文件不能与当前的2.3.1 Scapy版本完全兼容)

答案 2 :(得分:0)

scapy非常有用。

from scapy.all import *

packets = rdpcap('/path/to/rx.pcap')

def generatePacket(): 
 '''
   Generate a packet.
 '''
 IP()/TCP()/DiamG()

def dissectPacket():
 '''
   dissect a packet.
 '''
 packet[0][DiamG]

上面显示了这个想法。您可以使用print(repr(packet[0][DiamG]))查看结果。当然,为了检查数据包是否为Diameter数据包,您可能首先需要像这样检查:

x = packet[0]
while x.payload:
    x = x.payload
    if x.name == 'Diameter' # it has diameter message.
        # dissect it like above.

以及如何集成和发送Diameter数据包,可以检查: building diameter message