【问题标题】:Interfacing with TUN\TAP for MAC OSX (Lion) using Python使用 Python 与 MAC OSX (Lion) 的 TUN\TAP 接口
【发布时间】:2012-10-23 16:35:53
【问题描述】:

我找到了以下 tun\tap 示例程序,但无法运行:

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

我正在使用从http://tuntaposx.sourceforge.net/download.xhtml 安装的最新 tun\tap 驱动程序

【问题讨论】:

    标签: python networking driver tap tun


    【解决方案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."
    

    您必须以 root 身份运行它,或者执行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 本身会打印请求超时,因为没有隧道端点响应您的 ping 请求。

    【讨论】:

    • 避免过度挠头:如果您在运行脚本时遇到SError: [Errno 2] No such file or directory: '/dev/tun12',您可能还没有安装 TUN/TAP 驱动程序。
    • 你如何为 tap 而不是 tun 做到这一点?
    【解决方案2】:

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

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

    这对我有用:

    brew install Caskroom/cask/tuntap

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 2021-08-15
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多