如何从 kismet 读取 pcapng 文件流

How to read pcapng file stream from kismet

我在 raspberry pi 上使用 kismet 运行 来捕获我需要在另一台设备上实时分析的网络数据。 Kismet 的 api 有一个终点 receive a stream of binary data in the pcapng format。我已经成功地读取了流,但是除了实际的 pcapng 标准之外,我找不到任何关于从流中获取有用数据的文档。这很好,但传入的数据与格式不一致,我发现没有能够成功解析此流的库。我认为问题是在读取流时,在每个捕获的数据包之间插入了额外的数据,因此确定数据包的开始是主要问题。我目前正在使用 python 但我愿意接受其他语言,如果他们可以轻松解决这个问题或已经编写了库。

这是我用来将数据导入 python 的代码,其中 print(line.hex()) 是我访问相关数据的地方。

import requests
r = requests.get(url, stream=True)
for line in r.iter_lines():
    print(line.hex())

看起来错误是 python 请求模块没有捕获整个流并且丢失了某些字节。通过使用

curlSubProcess = subprocess.Popen(['curl', 'url/pcap/all_packets.pcapng'], stdout=subprocess.PIPE, bufsize=1)
curlSubProcess.stdout.read(lengthnext)

在 while 循环中,其中 lengthnext 是下一个数据包的长度,我能够正确读取它。然后我用我写的 class 解析了这个二进制块数据,用 scapy 解析了数据包数据,它按预期工作。