Python 模块PyShark没有属性';管道捕获&x27;

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

众所周知,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.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不能直接对这个问题发表评论。在实现该功能的方式中,您只需创建捕获对象,这些对象在打印后会立即丢弃。