用pyshark计算数据包数量

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)

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

lan*_*iac 7

我也是,len(cap) 是 0,我认为答案是失败。如果您想知道 len(cap),请在打印前加载数据包。使用: cap.load_packets()

cap.load_packets()
packet_amount = len(cap)
print packet_amount
Run Code Online (Sandbox Code Playgroud)


Der*_*ist 5

不知道它是否在Python 2.7中工作,但是在Python 3.4中len(cap)返回0。FileCapture对象是一个生成器,所以对我有用的是len([packet for packet in cap])


Lei*_*all 0

查看源代码发现这_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,因为它不包含完整的数据包列表。