Bob*_*Bob 2 python wireshark packet-sniffers wireshark-dissector pyshark
在此代码中使用pyshark
import pyshark
cap = pyshark.FileCapture(filename)
i = 0
for idx, packet in enumerate(cap):
i += 1
print i
print len(cap._packets)
Run Code Online (Sandbox Code Playgroud)
i并len(cap._packets)给出两个不同的结果。这是为什么?
我也是,len(cap) 是 0,我认为答案是失败。如果您想知道 len(cap),请在打印前加载数据包。使用: cap.load_packets()
cap.load_packets()
packet_amount = len(cap)
print packet_amount
Run Code Online (Sandbox Code Playgroud)
不知道它是否在Python 2.7中工作,但是在Python 3.4中len(cap)返回0。FileCapture对象是一个生成器,所以对我有用的是len([packet for packet in cap])
查看源代码发现这_packets是一个包含数据包的列表,并且仅在内部使用:
当迭代FileCapture对象时keep_packets = True,数据包将被添加到此列表中。
要访问FileCapture对象中的所有数据包,您应该像以前一样迭代它:
for packet in cap:
do_something(packet)
Run Code Online (Sandbox Code Playgroud)
但要计算数据包的数量,只需执行以下操作:
packet_amount = len(cap)
Run Code Online (Sandbox Code Playgroud)
或者像您一样使用计数器,但不要使用 _packets,因为它不包含完整的数据包列表。