为什么Scapy PcapReader方法显示的是Raw而不是DiamG?

问题描述 投票:0回答:1

我有一个使用 tcpdump 生成的 pcap 文件,其中包含直径流量并使用 Scapy PcapReader 读取它。它向我展示了每个数据包都有一个 DiamG 层,因此可以轻松提取 AVP。

但是,使用来自另一台服务器的另一个直径 pcap 文件,PcapReader 向我显示直径数据包具有原始层而不是 DiamG,因此我无法访问 AVP。

使用 Wireshark 可以成功读取两个 pcap 来分析直径流量。 两个文件之间的区别在于,第一个文件中使用的直径端口是 3868(这是标准),所以我认为这就是 PcapReader 正确识别它的原因。然而,在第二个文件中,直径端口是一个非标准数字(50XXX),所以我在每个数据包上得到一个原始层而不是 DiamG。 如何从第二个文件中正确读取直径信息(AVP 等)?

我使用以下代码来读取每个数据包:

  with PcapReader(f'{workdir}/data/{file}') as pr:
    for p in pr:
      x = p[0]
      print(x)

使用第一个 pcap 文件我得到:

CookedLinux / IP / TCP 10.66.80.210:13201 > 10.83.178.138:3868 PA / DiamG CookedLinux / IP / TCP 10.83.178.138:3868 > 10.66.80.210:13201 PA / DiamG ...

使用第二个文件(也包含直径流量),我得到:

CookedLinux / IP / TCP 10.179.217.91:37196 > 10.179.217.31:50124 PA / 原始CookedLinux / IP / TCP 10.179.217.31:50124 > 10.179.217.91:37196 PA / 原料

python scapy
1个回答
0
投票

阅读文档,我发现 pkt.decode_payload_as() 方法可以让您指定有效负载的解码方式。就我而言,想要将 TCP 有效负载解码为直径,这是通过以下句子实现的:

p[TCP].decode_payload_as(DiamG)

其中 DiamG 是目标有效负载的类。

© www.soinside.com 2019 - 2024. All rights reserved.