连续读取python中连续写入的pcap文件

2024-06-26 05:20:42 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python我想从由tshark连续写入的pcap文件(或用libpcappfring实时捕获编写的一段代码)中,以相同的顺序连续读取数据包

为了测试这一点,我以以下方式在Python中使用了tsharkscapy

@terminal1:ping -i 5 192.168.1.10

@terminal2:tshark -f "icmp" -a filesize:1000 -w ping_live.pcap

Python中的数据包读取器打算每5秒读取一个未读数据包(而不是每次读取整个数据包集)。但它不会等待5秒后即将写入的下一组数据包,它会退出

from scapy.all import *

def process_packet(packet):
    print(packet.summary())

sniff(offline="ping_live.pcap", prn=process_packet, store=0)
print("sniff complete, exiting")

然后我尝试在sniff方法周围放置while True:循环,但它并不是只读取下一个未读数据包,而是一次又一次地读取整个文件

我的需求的解决方案是什么(不限于scapy

多谢各位


Tags: 文件代码livepacket顺序pcapping数据包
1条回答
网友
1楼 · 发布于 2024-06-26 05:20:42

我不确定这是否回答了你的问题,因为我无法理解确切的要求。根据我对您问题中信息的解释,您希望“以写入PCAP文件的相同顺序连续读取数据包。”

您的示例使用了ICMP,,因此我的答案将使用该协议

import pyshark

# filter live capture by type, which is ICMP
capture = pyshark.LiveCapture('en0', display_filter='icmp')

for packet in capture:

    # obtain all the field names within the ICMP packets
    field_names = packet.icmp._all_fields

    # obtain all the field values 
    field_values = packet.icmp._all_fields.values()

    # enumerate the field names and field values
    for field_name, field_value in zip(field_names, field_values):

        # filter the time stamp
        if field_name == 'icmp.data_time':
            print(field_value)
            # output
            Mar 21, 2021 09:03:21.681450000 EDT
            Mar 21, 2021 09:03:21.681450000 EDT
            Mar 21, 2021 09:03:22.686135000 EDT
            Mar 21, 2021 09:03:22.686135000 EDT
            Mar 21, 2021 09:03:23.689576000 EDT
            Mar 21, 2021 09:03:23.689576000 EDT
            Mar 21, 2021 09:03:24.691429000 EDT
            Mar 21, 2021 09:03:24.691429000 EDT
            Mar 21, 2021 09:03:25.692395000 EDT
            Mar 21, 2021 09:03:25.692395000 EDT
            truncated...

以下是可以筛选的字段名称:

icmp.type
icmp.code
icmp.checksum
icmp.checksum.status
icmp.ident
icmp.seq
icmp.seq_le
icmp.data_time
icmp.data_time_relative
data
data.data
data.len

希望这个答案能帮助你

这里是我用pyshark写的一个GitHub文档

相关问题 更多 >