2012-05-25 1 views
0

공중에서 802.11p MAC 프레임을 수신하는 장치가 있고 직렬 포트에 완전히 변경되지 않은 (네트워크 계층 헤더가 없음) 장치가 있고 Wireshark, 그래서 우리는이 802.11p 프로토콜을 위해 일종의 스 니퍼 (sniffer)를 만들 수 있습니다.MAC 프레임 읽기 및 Wireshark에 공급

필자의 접근 방식은 (파이썬이있는 리눅스에서) 시리얼 포트를 열고, 프레임을 읽고, wireshark가 듣고있는 명명 된 파이프에 쓰기를했다. 많은 검색을 한 후에 내가 그 파이프에 쓰는 형식은 pcap 파일 형식과 같아야한다는 것을 알게되었습니다. 내가 pcap 포맷 (scapy, pcapy, dpkt) 할 몇 가지 파이썬 모듈을 보았지만 순수한 MAC 프레임 가져옵니다 및 wireshark 수있는 방식으로 pcap 형식으로 파일에 간단하게 씁니다 찾을 수 없습니다. 읽고 파싱을 모두하지 않고도. 당신의 제안은 무엇입니까?

답변

0

그냥 tap device을 만들고 그것에 프레임을 씀은 어떻습니까? 그런 다음 다른 기기와 마찬가지로 tap 기기를 wireshark으로 스니핑 할 수 있습니다. Python heretap 장치를 사용하고 C here에 더 긴 튜토리얼 (실제로는 tun 장치)을 사용하는 예가 있습니다.

NB : ...이 테스트를하지 않은,하지만 아이디어는 합리적인 것 같다

UPDATE :이 작동하는 것 같다. 위의 요지를 기반으로하지만, 은 파일에서 프레임 데이터를 읽고 장치에 씁니다.

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