gpt4 book ai didi

python - 使用 Python 请求响应原始文件类对象(处理 pcap 文件而不将其保存到磁盘)

转载 作者:行者123 更新时间:2023-11-28 18:38:50 25 4
gpt4 key购买 nike

借助 Python (2.7.9) Requests 库从 url 下载一个 pcap 文件:

import requests
response = requests.get('http://example.com/path/1.pcap', stream=True)

根据文档,response.raw 是一个类文件对象,我的目标是处理下载的文件而不将其保存到磁盘。

我首先查看了用于.pcap 文件解析的ScapyPyshark 库,但它们的函数(rdpcapFileCapture) 接受文件路径字符串作为参数。 dpkt 库中的 pcap.Reader 接受一个文件对象。第一次尝试 pcap=dpkt.pcap.Reader(resonse.raw) 报错:

AttributeError: 'HTTPResponse' object has no attribute 'name'

添加了名称属性:

setattr(response.raw,'name', 'test.pcap')

在那之后 pcap=dpkt.pcap.Reader(resonse.raw) 没有给出任何错误但是 pcap.readpkts() 失败了

io.UsupportedOperation: seek

确实 response.raw.seekable() 返回 False

我尝试设置 response.raw.decode_content = True 但这没有帮助。

是否有按照我尝试的方式处理对象的解决方案?也许需要额外的请求参数才能获得可搜索的响应对象?

顺便说一下,如果将响应对象写入文件 (shutil.copyfileobj(response.raw,file)),dpkt 之后会成功处理该文件。

最佳答案

最近将对 StringIO 对象的支持添加到 dpkt .所以,现在您可以从您的字符串创建一个 StringIO 对象,然后将其传递给 pcap.Reader

从字符串创建 StringIO 对象:

from StringIO import StringIO
data = StringIO("aaaaa..aa")

然后你可以做

import dpkt
from StringIO import StringIO
import requests

response = requests.get('http://example.com/path/1.pcap', stream=True)
data = StringIO(response.raw)
pcap = dpkt.pcap.Reader(data)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
...

关于python - 使用 Python 请求响应原始文件类对象(处理 pcap 文件而不将其保存到磁盘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29588214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com