gpt4 book ai didi

python - 读取 MAC 帧并将其馈送到 Wireshark

转载 作者:太空宇宙 更新时间:2023-11-03 19:17:50 28 4
gpt4 key购买 nike

我们有一个设备从空中接收 802.11p MAC 帧并将它们完全不变地馈送到串行端口(没有网络层 header ),我们希望看到它们在 Wireshark 中排列,因此我们可以有一种 self 为这个 802.11p 协议(protocol)制作了嗅探器。

我的方法(在带有Python的Linux中)是,打开串行端口,读取帧并将它们写入wireshark将监听的命名管道。经过大量搜索后,我发现我必须写入该管道的格式必须类似于 pcap 文件格式。我查看了一些执行 pcap 格式化的 python 模块(scapy、pcapy、dpkt),但我找不到任何获得纯 MAC 帧并简单地将其写入 pcap 格式的文件的方式,wireshark 可以阅读并且不需要我做所有的解析。您的建议是什么?

最佳答案

创建一个 tap device 怎么样?并将框架写入其中?然后,您可以像任何其他设备一样使用 wireshark 嗅探 tap 设备。有一个在 Python 中使用 tap 设备的示例 here ,以及一个较长的 C 教程(实际上是关于 tun 设备)here .

注意:我还没有测试过这个,但这个想法似乎很合理......

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

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()

关于python - 读取 MAC 帧并将其馈送到 Wireshark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758655/

28 4 0