ファイルから読み込んでRAWデータ送信
単純にファイルから読んだデータをバイナリとして送信する。
WireSharkやtcpdumpでキャプチャしたデータを書き換えて送信など、テスト用途などに。
・Windowsはセキュリティの観点からか、socket.AF_PACKETが未定義で使用できない。
・MaxOSも使えないとの情報あり。
・Linux(Ubuntu)では動作を確認できている。
・Linux仮想マシン経由でWindowsからのデータ送出は可能。
import sys
import socket
ETH_P_ALL = 3
interface = sys.argv[2]
f = open(sys.argv[1], "rb")
data = f.read();
f.close()
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_ALL))
s.bind((interface, 0))
s.sendall(data)
s.close()
受信したRAWデータをファイルへ書き込む
狙ったパケットだけ受信するようにフィルタロジックを追加すれば使えるか。
MACアドレスでフィルタするなど。
import sys
import socket
ETH_P_ALL = 3
interface = sys.argv[2]
f = open(sys.argv[1], "wb")
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_ALL))
s.bind((interface, 0))
data = s.recv(1514)
f.write(data)
f.close()
s.close()