Python 使用pyshark计算数据包数

Python 使用pyshark计算数据包数,python,wireshark,packet-sniffers,wireshark-dissector,pyshark,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) i和len(cap.\u数据包)给出两种不同的结果。这是为什么呢?查看后发现,\u packets是一个包含数据包的列表,仅在内部使用: 当使用keep\u packets=True迭代FileC

在这段代码中使用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.\u数据包)
给出两种不同的结果。这是为什么呢?

查看后发现,
\u packets
是一个包含数据包的列表,仅在内部使用:

当使用
keep\u packets=True迭代
FileCapture
对象时,数据包将添加到此列表中


要访问
FileCapture
对象中的所有数据包,您应该像以前一样对其进行迭代:

for packet in cap:
    do_something(packet)
但要计算数据包的数量,只需执行以下操作:

packet_amount = len(cap)

或者像您那样使用计数器,但是不要使用数据包,因为它不包含完整的数据包列表。

不知道它在Python2.7中是否有效,但在Python3.4中
len(cap)
返回0。 FileCapture对象是一个生成器,因此对我有效的是
len([packet for packet in cap])
我也是,len(cap)是0,我认为答案是失败的。 如果您想知道len(cap),请在打印前装入数据包。 用法:cap.load_数据包()


为什么我得到'raise RUNTIMERROR('此事件循环已在运行')RUNTIMERROR:当运行
len([cap中的数据包对应数据包])时,此事件循环已在运行'
cap.load_packets()
packet_amount = len(cap)
print packet_amount