Python:将pcap文件管道化到stdout

2024-04-27 05:21:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将xz的输出通过管道传输到自定义python脚本:

xz -cd file.pcap.xz | myscripy.py

但是,当脚本尝试运行以下行时,我收到一个错误:

^{pr2}$

收到一个错误

^{3}$

我在Ubuntu 2.04和Ubuntu2.04下运行。在


Tags: py脚本管道ubuntu错误cdpcapfile
3条回答

你有没有试过升级PyPcap来运行python3?这可能会有所帮助,因为Unicode处理更干净,而且在python3上不太容易发生意外。适当的包是可用的,至少在Debian上(可能还有派生发行版)。寻找:python3 pypcap。在

不能使用Python将包从文件传递到pcap.pcap()。您使用的^{} library^{}^{}C函数的一个薄薄的包装器,并且不提供传递Python文件对象的便利。这个包装器只接受文件名或网络接口名,其他都不接受。在

pcap_open_offline()函数确实接受-作为stdin的别名,因此直接将其传入:

import pcap

sniffer = pcap.pcap('-')

错误消息已经告诉您发生了什么。您需要pcap()函数的字符串,而不是file对象。要解决这个问题,请尝试

pcap.pcap(io.open(STDIN_ALIAS, 'r').read())

但我不确定这是否有效,因为你的文件可能是二进制的,而不是文本。在这种情况下,您可能希望用'rb'而不是'r'标志打开,然后进行一些转换(特别是如果您使用python3而不是python2.7)。在

我看到另一个问题:您的代码不可移植,因为它取决于:

^{pr2}$

阅读stdin的python方法如下(参见Reading binary data from stdin

import sys
string = sys.stdin.read()

相关问题 更多 >