如何从pcap文件中提取以太网级数据?
我有一些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
经过测试,效果非常好。