众所周知,比沙克是一种包装。由于大量的通信量,部分数据包会由于缓冲区大小的限制而丢失(默认情况下tshark有2MB)。
我的想法如下:我希望运行缓冲区大小类似于20 My的t鲨,并将输出输送到我的Python脚本。在本例中,我使用的是LiveCapture,而不是PipeCapture,如下所示:
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' . 我在这里查看了py鲨的源代码:https://github.com/KimiNewt/pyshark/blob/master/src/pyshark/capture/pipe_capture.py
出什么事了?
更新:
正如@maxkanthauer建议我做的那样:从pyshark.capture.pipe_capture import PipeCapture进口熊猫作为pd进口系统
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)>发布于 2021-04-12 13:41:03
出于某些原因,PipeCapture不是直接在pyshark下,而是在pyshark.capture.pipe_capture下。此外,os.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)https://stackoverflow.com/questions/66965479
复制相似问题