python - 模块 PyShark 没有属性“PipeCapture”
问题描述
众所周知,pyshark 是 tshark 的包装器。大流量时,由于缓冲区大小的限制,部分数据包会丢失(tshark 默认有 2 MB)
我的想法如下:我想以 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 的源代码: https ://github.com/KimiNewt/pyshark/blob/master/src/pyshark/capture/pipe_capture.py
怎么了?
更新:
正如@maxkanthauer 推荐的那样:import pyshark import pandas as pd import sys from pyshark.capture.pipe_capture import 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_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)
推荐阅读
- php - 在生产服务器上部署 Lighthouse 无效
- c# - 如何将项目的输出复制到启动项目的子目录中?
- reactjs - “保存调色板”按钮给出了“保存调色板”的 TypeError 不是函数
- filter - VTK 中的速度流量计算
- javascript - js更新关键帧属性消失
- python - 有没有办法查看你的 py 或 exe 文件在当前时刻运行了多少次?Python
- c - 为什么这个函数引用调用不起作用
- authentication - 使用 Active Directory 在 Oracle Apex 应用程序中进行身份验证
- reactjs - 如何使用 Material-UI v5 设置抽屉样式
- python - 爬虫卡在最后一页