这是如何使用Scapy解析Netflow数据包吗?

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

我对Scapy不熟悉,正在寻找确认以下命令是挖掘(解析)UDP / NetflowV9数据包的有效方法。

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

  • 流集1:具有2个流记录的数据流集
  • 流程集2:选项模板流程集
  • 流集3:具有1个流记录的数据流集
  • 流程集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)

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

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

scapy netflow
1个回答
0
投票

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

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

  1. 通过bind_layers( UDP, NetflowHeader, dport=xxxx )将pcap中Netflow流量的目标端口绑定到默认Netflow端口2055,其中xxxx是pcap中Netflow流量的目标端口。如果您的Netflow流量已经在2055上,那么这是不必要的。可能到2056年,它也是不必要的。
  2. 读取pcap(一次或逐帧读取)。要逐帧读取它,请循环执行:pkt = rdpcap(pcap)其中pcap是pcap文件的路径。
  3. 使用netflowv9_defragment解析完整的单个netflow框架,如下所示:netflowv9_defragment(pkt)[0]
© www.soinside.com 2019 - 2024. All rights reserved.