1

我正在使用在树莓派上运行的 kismet 来捕获我需要在另一台设备上实时分析的网络数据。Kismet 的 api 有一个端点来接收 pcapng 格式的二进制数据流. 我已经成功地读取了流,但是除了实际的 pcapng 标准之外,我找不到任何关于从流中获取有用数据的文档。这很好,但传入的数据与格式不一致,我发现没有能够成功解析此流的库。我认为问题在于,在读取流时,在每个捕获的数据包之间插入了额外的数据,因此确定数据包的开始是主要问题。我目前正在使用 python,但如果他们可以轻松解决这个问题或已经编写了库,我对其他语言持开放态度。

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

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

1 回答 1

2

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

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

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

于 2019-10-21T19:53:25.457 回答