用pyshark计算数据包的数量

时间:2014-11-19 19:56:30

标签: 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)

ilen(cap._packets)给出了两个不同的结果。那是为什么?

3 个答案:

答案 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,因为它不包含完整的数据包列表。