在这段代码中使用 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)
给出两个不同的结果。这是为什么?
在这段代码中使用 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)
给出两个不同的结果。这是为什么?
不知道它是否适用于 Python 2.7,但在 Python 3.4 中len(cap)
返回 0。 FileCapture 对象是一个生成器,所以对我有用的是len([packet for packet in cap])
我也是,len(cap) 为 0,我认为答案是失败。如果您想知道 len(cap),请在打印前加载数据包。使用:cap.load_packets()
cap.load_packets()
packet_amount = len(cap)
print packet_amount
查看源代码会发现这_packets
是一个包含数据包的列表,并且仅在内部使用:
当使用数据包迭代FileCapture
对象时,keep_packets = True
将被添加到此列表中。
要访问FileCapture
对象中的所有数据包,您应该像以前一样对其进行迭代:
for packet in cap:
do_something(packet)
但是要计算数据包的数量,只需这样做:
packet_amount = len(cap)
或像您一样使用计数器,但不要使用 _packets
,因为它不包含完整的数据包列表。
只是使用回调函数添加另一种方式。也有点快的方法。
length = 0
def count_callback(pkt):
global length
length = length + 1
cap.apply_on_packets(count_callback)
print(length)