使用Python (2.7.9)的Requests库从URL下载pcap文件:
根据文档,
import requests
response = requests.get('http://example.com/path/1.pcap', stream=True)
根据文档,
response.raw
是类似文件的对象。我的目标是在不将下载的文件保存到磁盘的情况下处理它。我首先查看了 Scapy
和 Pyshark
库来解析 .pcap
文件,但它们的函数 (rdpcap
和 FileCapture
) 接受文件路径字符串作为参数。而来自 dpkt
库的 pcap.Reader
则接受一个文件对象。第一次尝试 pcap=dpkt.pcap.Reader(resonse.raw)
会报错:AttributeError: 'HTTPResponse' object has no attribute 'name'
新增了Name属性:
setattr(response.raw,'name', 'test.pcap')
之后,pcap=dpkt.pcap.Reader(response.raw)
没有出现任何错误,但是 pcap.readpkts()
失败了,出现了以下错误:
io.UsupportedOperation: seek
事实上,response.raw.seekable()
返回False
。
我尝试设置response.raw.decode_content = True
,但这并没有帮助。
处理对象的方式是否有解决方案?也许需要额外的请求参数才能获得可寻址的响应对象?
顺便说一句,如果将响应对象写入文件(shutil.copyfileobj(response.raw, file)
),然后dpkt
可以成功地使用该文件。