1

我是 scapy 的新手,正在寻找确认以下命令是挖掘(解析)UDP/NetflowV9 数据包的有效方法。

我问的原因是该方法对我来说似乎有效并且适用于我尝试过的许多数据包。但是,我遇到的至少一个数据包失败了。失败的解码/解析针对具有 4 个 Flowset 的 UDP/Netflow 数据包,如下所示:

  • Flowset 1:具有 2 个流记录的数据流集
  • 流程集 2:选项模板流程集
  • Flowset 3:具有 1 个流记录的数据流集
  • Flowset 4:数据模板流程集

方法

pkt = rdpcap(pcap)
pkt[0][UDP].payload  
NetflowHeader(pkt[0][UDP].payload)  
NetflowHeader(pkt[0][UDP].payload).payload  
NetflowHeaderV9(NetflowHeader(pkt[0][UDP].payload).payload)
NetflowHeaderV9(NetflowHeader(pkt[0][UDP].payload).payload).payload
NetflowDataflowsetV9(NetflowHeaderV9(NetflowHeader(pkt[0][UDP].payload).payload).payload)
NetflowDataflowsetV9(NetflowHeaderV9(NetflowHeader(pkt[0][UDP].payload).payload).payload).payload
NetflowOptionsFlowsetV9(NetflowDataflowsetV9(NetflowHeaderV9(NetflowHeader(pkt[0][UDP].payload).payload).payload).payload)

上面的命令似乎可以显示有关前 2 个流集的详细信息,但最后一个命令的输出对于流集 3 有错误的数据(与 Wireshark 显示的不匹配)。特别是,首先,对于流集 3 flowsetID 和长度错误。我什至还没有尝试查看 flowset 4,因为 flowset 3 的数据是错误的。

所以,我只是在寻找确认我的方法是正确的。如果我的方法是正确的,那么我将尝试找到一种方法来匿名化 pcap 文件(单帧)并在单独的 stackoverflow 帖子中询问。我不想在流记录中透露 IP 地址。

4

1 回答 1

0

我最初的问题的答案是我没有正确使用 scapy 来解析来自 pcap 的 Netflow 流量。

我相信正确的方法(感谢@Cukic0d的帮助)是:

  1. 将 pcap 中 Netflow 流量的目标端口绑定到默认 Netflow 端口 2055,bind_layers( UDP, NetflowHeader, dport=xxxx )其中 xxxx 是 pcap 中 Netflow 流量的目标端口。如果您的 Netflow 流量已经在 2055 上,则这是不必要的。对于 2056,可能也不需要。
  2. 读入 pcap(一次或逐帧)。要逐帧读取它,请在循环中执行此操作:pkt = rdpcap(pcap)其中 pcap 是您的 pcap 文件的路径。
  3. 使用 netflowv9_defragment 解析刚刚读入的完整单个 netflow 帧,如下所示:netflowv9_defragment(pkt)[0]
于 2020-06-03T21:11:44.363 回答