如何从pcap文件中提取以太网级数据?

2 投票
2 回答
4062 浏览
提问于 2025-04-17 08:17

我有一些pcap文件,以前我用tshark和Python结合来提取源IP地址、时间戳等等。

不过现在我在Wireshark里打开这些pcap文件,它里面还有VLAN的信息,而我现在想提取的是VID。

我在终端里用 tshark -r xx.pcap 命令,这样只能显示TCP层的信息,无法获取到VLAN ID。有没有人知道怎么用Python做到这一点?需要用什么库或者工具吗?

2 个回答

1

你可以使用 Scapy 来实现这个功能:

from scapy.all import *

recs = rdpcap("yourpcap.pcap")

# extract vlan id from first record
for rec in recs:
    dot1q = rec.get_layer(Dot1Q)
    if dot1q is None:
        # not vlan here, skip.
        continue
    print 'Vlanid found:', dot1q.vlan, 'on packet', rec

这个代码没有测试过,但可能有效。想要学习 Scapy,最好的办法就是启动它,试着使用自动补全功能,同时阅读一些教程 :)

2

完美的解决方案是 Scapy

在这个例子中,我创建了一个带有VLAN的网络数据包,然后打印出VLAN的ID。

from scapy.all import *
pkt=Ether()/Dot1Q(vlan=0x32)/IP(dst="192.168.1.66")/ICMP()
print pkt[Dot1Q].vlan

这个例子展示了如何读取一个pcap文件并打印出VLAN的ID。

from scapy.all import *
from scapy.utils import *
pkts=rdpcap("filename.pcap")
for pkt in pkts:
    if pkt.haslayer(Dot1Q):
        print pkt[Dot1Q].vlan 

经过测试,效果非常好。

撰写回答