我们有一个从空中接收802.11p MAC帧的设备,并将它们完全不改变地传送到串行端口(没有网络层报头),我们希望看到它们被安排在Wireshark中,因此我们可以为这种802.11p协议提供一种自制的嗅探器。
我的方法(在linux中使用python)是打开串口,读取框架并将它们写到wireshark将监听的命名管道中。经过大量搜索,我发现我必须写入管道的格式必须与pcap格式类似。我看过一些python模块,它们执行pcap格式设置(scapy、pcapy、dpkt),但我找不到任何获得纯MAC帧的模块,它们只是以wireshark可以读取的方式将其写入pcap格式的文件,而无需进行所有的解析。你有什么建议吗?
发布于 2012-05-25 18:32:09
创建一个抽头装置并编写框架如何?然后,您就可以像任何其他设备一样,用tap来嗅探wireshark设备。这里有一个在Python中使用tap设备的例子,还有一个在C 这里中使用更长的教程(实际上是关于tun设备)。
注:我还没有测试过这个,但这个想法似乎是合理的.
更新:这似乎是可行的。它基于上述要点,但只需从文件中读取帧数据并将其写入设备:
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()https://stackoverflow.com/questions/10758655
复制相似问题