首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模块PyShark没有属性“PipeCapture”

模块PyShark没有属性“PipeCapture”
EN

Stack Overflow用户
提问于 2021-04-06 08:49:30
回答 1查看 450关注 0票数 0

众所周知,比沙克是一种包装。由于大量的通信量,部分数据包会由于缓冲区大小的限制而丢失(默认情况下tshark有2MB)。

我的想法如下:我希望运行缓冲区大小类似于20 My的t鲨,并将输出输送到我的Python脚本。在本例中,我使用的是LiveCapture,而不是PipeCapture,如下所示:

代码语言:javascript
复制
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)

我犯了错误:

代码语言:javascript
复制
AttributeError: module 'pyshark' has no attribute 'PipeCapture' . 

我在这里查看了py鲨的源代码:https://github.com/KimiNewt/pyshark/blob/master/src/pyshark/capture/pipe_capture.py

出什么事了?

更新:

正如@maxkanthauer建议我做的那样:从pyshark.capture.pipe_capture import PipeCapture进口熊猫作为pd进口系统

代码语言:javascript
复制
r =  sys.stdin

while True:
    capture = PipeCapture(pipe=r)
    print(capture)

然后开始我的剧本:

代码语言:javascript
复制
tcpdump -l  port 5060 -i etho  | python  pyshark_test.py

尽管我确信有许多数据包的输出是:

代码语言:javascript
复制
<PipeCapture (0 packets)>
<PipeCapture (0 packets)>
<PipeCapture (0 packets)>
EN

回答 1

Stack Overflow用户

发布于 2021-04-12 13:41:03

出于某些原因,PipeCapture不是直接在pyshark下,而是在pyshark.capture.pipe_capture下。此外,os.pipe()不是管道参数的有效值。下列措施应能发挥作用:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66965479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档