2012-10-23 11 views
7

का उपयोग कर के साथ Interfacing मैं निम्नलिखित tun \ नल उदाहरण कार्यक्रम मिल गया है और यह काम नहीं कर सकते हैं:मैक OSX के लिए TUN नल (शेर) अजगर

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

मैं बदलाव कर दिया है निम्नलिखित लाइनों:

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

पहली पंक्ति ड्राइवर के वास्तविक स्थान को दर्शाने के लिए संशोधित की गई थी।

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 

मैं नवीनतम tun \ नल ड्राइवरों से http://tuntaposx.sourceforge.net/download.xhtml

उत्तर

6

स्थापित OSX tun/नल ड्राइवर काम करने के लिए लगता है का उपयोग कर रहा: यह मूल रूप से

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

मैं निम्नलिखित त्रुटि मिलती है चल रहा था पर थोड़ा सा अंतर। लिनक्स उदाहरण गतिशील रूप से एक ट्यून इंटरफ़ेस आवंटित करता है, जो कम से कम उसी तरह ओएसएक्स में काम नहीं करता है।

मैंने एक स्व-चयनित ट्यून डिवाइस का उपयोग करके ओएसएक्स पर ट्यून का उपयोग कैसे किया जा सकता है, इस बारे में एक बुनियादी उदाहरण बनाने के लिए कोड को तोड़ दिया, प्रत्येक पैकेट को कंसोल पर प्रिंट करना। मैं बहुत मुद्रण के लिए एक निर्भरता के रूप में Scapy जोड़ा है, लेकिन यदि आप एक कच्चे पैकेट डंप से यह जगह ले सकता है अगर आप चाहते हैं:

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." 

आप या तो रूट के रूप में इस चलाने के लिए है, या एक sudo chown your_username /dev/tun12 करना होगा खोलने के लिए अनुमति दी जा उपकरण।

एक बिंदु से बिंदु इंटरफेस के रूप में यह कॉन्फ़िगर करने के लिए, टाइप करें:

$ sudo ifconfig tun12 10.12.0.2 10.12.0.1 

ध्यान दें कि tun12 इंटरफ़ेस केवल उपलब्ध हो जाएगा, जबकि /dev/tun12 खुला है, अर्थात, जबकि कार्यक्रम चल रहा है। यदि आप प्रोग्राम को बाधित करते हैं, तो आपका ट्यून इंटरफ़ेस गायब हो जाएगा, और अगली बार जब आप प्रोग्राम चलाते हैं तो आपको इसे फिर से कॉन्फ़िगर करना होगा।

अब आप अपने अंतिम बिंदु को पिंग हैं, तो आपके पैकेट कंसोल के लिए मुद्रित किया जाएगा:

$ ping 10.12.0.1 

पिंग ही अनुरोध समय समाप्ति प्रिंट होगा, क्योंकि ऐसा कोई सुरंग endpoint अपने पिंग अनुरोधों पर प्रतिक्रिया है।

+0

अत्यधिक सिर scratching से अपनी खोपड़ी सहेजने के लिए::

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

यह मेरे लिए काम किया है, तो आप 'सेरर का अनुभव करते हैं: [Errno 2] ऐसी कोई फ़ाइल या निर्देशिका नहीं: स्क्रिप्ट चलाने पर'/dev/tun12'' ', आपने शायद अभी तक TUN/TAP ड्राइवर स्थापित नहीं किया है। –

+0

ट्यून के बजाय टैप के लिए आप इसे कैसे करते हैं? –

0

तो 'ऐसा कोई फ़ाइल या निर्देशिका' त्रुटि करने के बारे में:

brew install Caskroom/cask/tuntap

संबंधित मुद्दे