在此代码中使用pyshark
import pyshark
cap = pyshark.FileCapture(filename)
i = 0
for idx, packet in enumerate(cap):
i += 1
print i
print len(cap._packets)
i
和len(cap._packets)
给出了两个不同的结果。那是为什么?
答案 0 :(得分:4)
不知道它是否在Python 2.7中有效,但在Python 3.4 len(cap)
中返回0。
FileCapture对象是一个生成器,所以对我有用的是len([packet for packet in cap])
答案 1 :(得分:2)
我也是,len(cap)为0,我认为答案是失败的。 如果您想知道len(cap),请在打印之前装入数据包。 使用:cap.load_packets()
cap.load_packets()
packet_amount = len(cap)
print packet_amount
答案 2 :(得分:1)
查看source code表明_packets
是一个包含数据包的列表,仅在内部使用:
在迭代FileCapture
对象时,keep_packets = True
数据包会被添加到此列表中。
要访问FileCapture
对象中的所有数据包,您应该像对待它一样迭代它:
for packet in cap:
do_something(packet)
但要计算数据包的数量,请执行以下操作:
packet_amount = len(cap)
或像您一样使用计数器,但不要使用 _packets
,因为它不包含完整的数据包列表。