import pyshark
cap = pyshark.FileCapture("icmp_len_binary.pcap", display_filter="icmp && icmp.type == 8",
tshark_path="xxxxxx")
for i in range(0, len(cap)):
print(cap[i].icmp)
cap.close()
当我运行这段代码的时候并没有输出,可见捕获文件中的数据包数量可能为0
我们可以使用cap.load_packets()就可以解决问题
cap.load_packets()是 PyShark 中的一个方法,用于加载捕获文件中的所有数据包到内存中。默认情况下,在创建FileCapture对象后,PyShark 不会立即加载所有数据包到内存中,而是在需要时逐个读取数据包。这样做是为了节省内存,特别是当捕获文件非常大时。
调用cap.load_packets()方法后,PyShark 将会从捕获文件中读取并加载所有数据包到内存中,这样你就可以直接遍历数据包而不需要每次都从文件中读取。
import pyshark
cap = pyshark.FileCapture("icmp_len_binary.pcap", display_filter="icmp && icmp.type == 8",
tshark_path="xxxxxx")
cap.load_packets() # 加载所有数据包到内存中
for packet in cap:
print(packet.icmp.data_len)
cap.close()
运行成功