2012-10-23 10 views
7

znalazłem następujący tun \ przykładowy tap program i nie może zmusić go do pracy:relacje z TUN TAP dla Mac OS X (Lion) przy użyciu Pythona

http://www.secdev.org/projects/tuntap_udp/files/tunproxy.py

mam zmodyfikowane następujące wiersze:

f = os.open("/dev/tun0", os.O_RDWR) 
ifs = ioctl(f, TUNSETIFF, struct.pack("16sH", "toto%d", TUNMODE)) 
ifname = ifs[:16].strip("\x00") 

Pierwsza linia została zmodyfikowana, aby odzwierciedlić rzeczywistą lokalizację sterownika. To był pierwotnie

f = os.open("/dev/net/tun", os.O_RDWR) 

Po uruchomieniu pojawia się następujący błąd:

sudo ./tuntap.py -s 9000 
Password: 
Traceback (most recent call last): 
    File "./tuntap.py", line 65, in <module> 
    ifs = ioctl(f, TUNSETIFF, struct.pack("16sH", "toto%d", TUNMODE)) 
IOError: [Errno 25] Inappropriate ioctl for device 

Używam najnowsze sterowniki tap tun \ zainstalowane z http://tuntaposx.sourceforge.net/download.xhtml

Odpowiedz

6

OSX tun/kierowca z kranu wydaje się działać Trochę inaczej. Przykład Linuxa dynamicznie przydziela interfejs tun, który nie działa w systemie OSX, przynajmniej nie w ten sam sposób.

Usunąłem kod, aby utworzyć podstawowy przykład wykorzystania tuningu w systemie OSX przy użyciu samodzielnie dobranego urządzenia tuningowego, drukowania każdego pakietu na konsolę. Dodałem Scapy jako zależność do druku ładna, ale można zastąpić go surowego zrzutu pakietów, jeśli chcesz:

import os, sys 
from select import select 
from scapy.all import IP 

f = os.open("/dev/tun12", os.O_RDWR) 
try: 
    while 1: 
     r = select([f],[],[])[0][0] 
     if r == f: 
      packet = os.read(f, 4000) 
      # print len(packet), packet 
      ip = IP(packet) 
      ip.show() 
except KeyboardInterrupt: 
    print "Stopped by user." 

Będziesz albo trzeba uruchomić jako root, albo zrobić sudo chown your_username /dev/tun12 aby móc otworzyć urządzenie.

Aby skonfigurować go jako interfejsu point-to-point, typ:

$ sudo ifconfig tun12 10.12.0.2 10.12.0.1 

pamiętać, że interfejs tun12 będzie dostępna tylko podczas /dev/tun12 jest otwarty, to znaczy, gdy program jest uruchomiony. Jeśli przerwiesz program, twój interfejs tun zniknie i będziesz musiał skonfigurować go ponownie przy następnym uruchomieniu programu.

Jeśli teraz pingować swój punkt końcowy, Twoje pakiety będą wypisywane na konsoli:

$ ping 10.12.0.1 

sama Ping wypisze żądania limity czasu, ponieważ nie ma punktu końcowego tunelu reaguje na prośby ping.

+0

Aby zapisać skórę głowy przed nadmiernym drapania głowy: jeśli możesz doświadczyć 'SError: [Errno 2] Brak takiego pliku lub katalogu: '/ dev/tun12'' podczas uruchamiania skryptu, prawdopodobnie nie zainstalowałeś jeszcze sterownika TUN/TAP. –

+0

Jak to zrobić dla tap zamiast tun? –

0

więc o „Nie ma takiego pliku lub katalogu” błąd podczas wykonywania:

f = os.open("/dev/tun12", os.O_RDWR)

ten pracował dla mnie:

brew install Caskroom/cask/tuntap

Powiązane problemy