0

我遇到了 Wiresharkdecode as功能,我可以在其中解码 UDP 数据包CFLOW以获取我的 Netflow 数据。

是否可以编写一个脚本来解码 UDP 数据包并获取 Netflow 数据?

目前我正在使用 python3-scapy 进行尝试。我在哪里嗅探接口并仅检索 UDP 数据包。我现在被困住了,因为我不知道下一步该怎么做。

注意:我的重点是 Netflow 版本 9

下面是我的代码:

from scapy.all import *

## Create a Packet Counter
counter = 0
INTERFACE = "<interface_name>"

## Define our Custom Action function
def custom_action(pkts):
    for packet in pkts:
        if (packet.haslayer(UDP)):
             # do something , what should i do?

if __name__ == "__main__":
    ## Setup sniff, filtering for IP traffic
    sniff(iface=INTERFACE, prn = custom_action, store=0)
4

1 回答 1

1

仅供参考,您可以使用layer in pkt而不是“旧” pkt.haslayer(layer)。这将适用于Scapy 的开发版本(适用于 Python 3)。

回调接受数据包,而prn不是数据包列表或生成器。

如果您想使用NetflowHeader()(尝试)剖析任何 UDP 数据包,您可以执行以下操作:

def custom_action(pkt):
    if UDP in pkt:
        pkt[UDP].payload = NetflowHeader(raw(pkt[UDP].payload))

pkts = sniff(iface=INTERFACE, prn=custom_action)

但最接近 Wireshark 在 Scapy 中“解码为”功能的方法是简单地覆盖UDP's.payload_guess属性:

UDP.payload_guess = [({}, NetflowHeader)] 
pkts = sniff(iface=INTERFACE)
于 2017-12-05T16:48:29.010 回答