【发布时间】:2026-02-01 05:45:02
【问题描述】:
以下代码在使用以下advice 时会产生不可预知的结果:
import pyshark
import pandas as pd
import asyncio
def ProcessPackets(packet):
global packet_list
packet_version = packet.layers[1].version
layer_name = packet.layers[2].layer_name
packet_list.append([packet_version, layer_name, packet.length, packet.sniff_time])
def Capture(timeOrPath):
global packet_list
packet_list=[]
try:
timeout=int(timeOrPath)
capture = pyshark.LiveCapture()
capture.apply_on_packets(ProcessPackets, timeout=timeout)
except asyncio.TimeoutError:
pass
except ValueError:
capture = pyshark.FileCapture(timeOrPath)
capture.load_packets()
capture.apply_on_packets(ProcessPackets)
data = pd.DataFrame(packet_list, columns=['vIP', 'protocol', 'length','timestamp'])
print(data['timestamp'].iloc[-1]-data['timestamp'].iloc[0])
def main():
Capture(6)
if __name__ == '__main__':
main()
有时计算的时间会超过给定的超时时间。
(timestamp 是packet.sniff_time)
【问题讨论】:
-
仅供参考 capture.apply_on_packets(dosomething, timeout=timeout) 和 capture.sniff(timeout=timeout) 不应一起使用,因为它们做同样的事情。
-
@Lifeiscomplex 自发布以来我实际上已经更改了它,但这并没有帮助。我认为给定的超时包括
ProcessPackets()的处理时间,但我无法解决问题。时间是不可预测的。incoming=data['timestamp'].iloc[-1]-data['timestamp'].iloc[0]行给出了从文件中捕获的正确值,因此问题一定是超时 -
@Lifeiscomplex 我想它会在某个时候引发
asyncio.TimeoutError,这就是捕获停止的时候。其他时候它不会超过capture.apply_on_packets(App.ProcessPackets, timeout=timeout)。虽然,其他时候我会得到超过给定超时的持续时间...... -
你能用你正在使用的当前代码更新问题吗?另外请提供更多详细信息:incoming=data['timestamp'].iloc[-1]-data['timestamp'].iloc[0],因为我不完全理解问题。谢谢。