与使用Python TUN \\ TAP用于MAC OSX(狮)接口(Interfacing wit

2019-07-02 10:28发布

我发现下面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")

第一行被修改,以反映驾驶员的真实位置。 它原是

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

一旦运行,我得到以下错误:

 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

Answer 1:

在OSX TUN / TAP驱动似乎工作有点不同。 Linux的例子动态分配TUN接口,这并不在OSX工作,至少不会以同样的方式。

我剥离代码来创建的如何TUN可以在OSX上使用自选定tun设备,打印每个分组到控制台中使用的基本示例。 我说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是开放的,即当程序运行。 如果中断程序,您的TUN界面就会消失,你将需要下一次重新配置它,你运行该程序。

如果你现在ping您的终点,你的数据包将被打印到控制台:

$ ping 10.12.0.1

平安本身将打印请求超时,因为没有隧道端点回应您的ping请求。



Answer 2:

所以关于“没有这样的文件或目录”时做的错误:

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

这个工作对我来说:

brew install Caskroom/cask/tuntap



文章来源: Interfacing with TUN\\TAP for MAC OSX (Lion) using Python