读取MAC帧并将其提供给Wireshark

时间:2012-05-25 17:11:44

标签: python pcap

我们有一台设备从空中接收802.11p MAC帧,并将它们完全保持不变地连接到串口(没有网络层头),我们希望看到它们安排在Wireshark中,所以我们可以有一种自我为此802.11p协议制作了嗅探器。

我的方法(在linux下使用python)是打开串口,读取帧并将它们写入wireshark将要监听的命名管道。经过大量的搜索,我发现我必须写入该管道的格式必须像pcap文件格式一样。我看过一些做pcap格式化的python模块(scapy,pcapy,dpkt),但我找不到任何获得纯MAC帧的东西,只需将其写入pcap格式的文件,即Wirehark可以阅读,没有我必须做所有的解析。你的建议是什么?

1 个答案:

答案 0 :(得分:1)

如何创建tap device并将帧写入其中呢?然后,您可以使用tap嗅探wireshark设备,就像任何其他设备一样。有一个示例在Python here中使用tap设备,在C here中使用较长的教程(实际上约为tun设备)。

NB:我没有测试过这个,但这个想法看似合理......

更新:这似乎有效。它基于上述要点,但是 只需从文件中读取帧数据并将其写入设备:

import sys
import fcntl
import os
import struct
import subprocess

TUNSETIFF = 0x400454ca
TUNSETOWNER = TUNSETIFF + 2
IFF_TUN = 0x0001
IFF_TAP = 0x0002
IFF_NO_PI = 0x1000

# Open TUN device file.
tun = open('/dev/net/tun', 'r+b')
# Tell it we want a TUN device named lars0.
ifr = struct.pack('16sH', 'lars0', IFF_TAP | IFF_NO_PI)
fcntl.ioctl(tun, TUNSETIFF, ifr)
# Optionally, we want it be accessed by the normal user.
fcntl.ioctl(tun, TUNSETOWNER, 1000)

# Bring it up and assign addresses.
subprocess.check_call(['ifconfig', 'lars0', 'up'])

print 'waiting'
sys.stdin.readline()

# Read an IP packet been sent to this TUN device.
packet = list(open('/tmp/packet.raw').read())

# Write the reply packet into TUN device.
os.write(tun.fileno(), ''.join(packet))

print 'waiting'
sys.stdin.readline()