1

空中から 802.11p MAC フレームを受信し、それらを完全に変更せずに (ネットワーク層ヘッダーなしで) シリアル ポートに供給するデバイスがあり、それらを Wireshark に配置して、一種の自作のスニファを使用できるようにしたいと考えています。この 802.11p プロトコル。

私のアプローチ(Pythonを使用したLinux)は、シリアルポートを開き、フレームを読み取り、それらをwiresharkがリッスンする名前付きパイプに書き込むことでした。多くの検索の後、そのパイプに書き込む必要がある形式は、pcap ファイル形式のようでなければならないことがわかりました。pcapフォーマット(scapy、pcapy、dpkt)を行ういくつかのpythonモジュールを調べましたが、純粋なMACフレームを取得して、wiresharkができる方法でpcapフォーマットでファイルに書き込むだけのものは見つかりません読んで、すべての解析を行う必要はありません。あなたの提案は何ですか?

4

1 に答える 1

1

タップ デバイスを作成し、それにフレームを書き込むだけではどうですか? その後、他のtapデバイスと同じようにデバイスをスニッフィングできます。Python でデバイスwiresharkを使用する例がここにあり、 Cでのより長いチュートリアル (実際にはデバイスについて) がここにあります。taptun

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()
于 2012-05-25T18:32:09.063 に答える