Python 模块PyShark没有属性';管道捕获&x27;
众所周知,pyshark是tshark的包装。 在流量较大的情况下,由于缓冲区大小的限制,部分数据包丢失(tshark默认为2MB) 我的想法如下: 我想运行缓冲区大小为20MB的tshark,并将输出通过管道传输到我的Python脚本。在本例中,我使用PipeCapture而不是LiveCapture,如下所示:Python 模块PyShark没有属性';管道捕获&x27;,python,tshark,pyshark,Python,Tshark,Pyshark,众所周知,pyshark是tshark的包装。 在流量较大的情况下,由于缓冲区大小的限制,部分数据包丢失(tshark默认为2MB) 我的想法如下: 我想运行缓冲区大小为20MB的tshark,并将输出通过管道传输到我的Python脚本。在本例中,我使用PipeCapture而不是LiveCapture,如下所示: import pyshark import pandas as pd import os r, w = os.pipe() pid = os.fork() r = os.fdope
import pyshark
import pandas as pd
import os
r, w = os.pipe()
pid = os.fork()
r = os.fdopen(r)
capture = pyshark.PipeCapture(pipe=r, bpf_filter='udp port 5060')
for packet in capture.sniff_continuously():
print(packet)
我得到了一个错误:
AttributeError: module 'pyshark' has no attribute 'PipeCapture' .
我在这里查看了pyshark的源代码:
怎么了
更新:
正如@maxkanthauer推荐的那样
我做了:
进口皮沙克
作为pd进口熊猫
导入系统
从pyshark.capture.pipe\u捕获导入PipeCapture
r = sys.stdin
while True:
capture = PipeCapture(pipe=r)
print(capture)
然后开始我的脚本:
tcpdump -l port 5060 -i etho | python pyshark_test.py
尽管我确信有许多数据包,但输出是:
<PipeCapture (0 packets)>
<PipeCapture (0 packets)>
<PipeCapture (0 packets)>
由于某些原因,PipeCapture不直接位于pyshark下,而是位于pyshark.capture.pipe\u capture下。此外,os.pipe()不是pipe参数的有效值。以下方面应起作用:
import pyshark
import sys
from pyshark.capture.pipe_capture import PipeCapture
r = sys.stdin
capture = PipeCapture(pipe=r)
def print_callback(pkt):
print(pkt)
capture.apply_on_packets(print_callback)
@harp1814不能直接对这个问题发表评论。在实现该功能的方式中,您只需创建捕获对象,这些对象在打印后会立即丢弃。