使用Python与MAC OSX(Lion)的TUN \ TAP接口 [英] Interfacing with TUN\TAP for MAC OSX (Lion) using Python

查看:457
本文介绍了使用Python与MAC OSX(Lion)的TUN \ TAP接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找到了以下tun \ tap示例程序,但无法使其正常工作:

I found the following tun\tap example program and can not get it to work:

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

第一行已修改,以反映驱动程序的实际位置.原来是

The first line was modified to reflect the real location of the driver. It was originally

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

运行时,出现以下错误:

Upon running I get the following error:

 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安装的最新tun \ tap驱动程序.xhtml

推荐答案

OSX tun/tap驱动程序的工作方式似乎有所不同. Linux示例动态分配了一个tun接口,该接口在OSX中不起作用,至少不是以相同的方式.

The OSX tun/tap driver seems to work a bit different. The Linux example dynamically allocates a tun interface, which does not work in OSX, at least not in the same way.

我剥离了代码,创建了一个基本示例,说明如何使用自选的tun设备在OSX上使用tun,并将每个数据包打印到控制台.我添加了 Scapy 作为漂亮打印的依赖项,但是您可以将其替换为原始文件数据包转储,如果需要的话:

I stripped the code to create a basic example of how tun can be used on OSX using a self-selected tun device, printing each packet to the console. I added Scapy as a dependency for pretty printing, but you can replace it by a raw packet dump if you want:

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才能打开设备.

You will either have to run this as root, or do a sudo chown your_username /dev/tun12 to be allowed to open the device.

要将其配置为点对点接口,请输入:

To configure it as a point-to-point interface, type:

$ sudo ifconfig tun12 10.12.0.2 10.12.0.1

请注意,tun12界面仅在/dev/tun12打开时(即程序运行时)可用.如果中断程序,则tun界面将消失,并且在下次运行该程序时需要再次对其进行配置.

Note that the tun12 interface will only be available while /dev/tun12 is open, i.e. while the program is running. If you interrupt the program, your tun interface will disappear, and you will need to configure it again next time you run the program.

如果您现在对端点执行ping操作,您的数据包将被打印到控制台:

If you now ping your endpoint, your packets will be printed to the console:

$ ping 10.12.0.1

Ping本身将打印请求超时,因为没有隧道端点响应您的ping请求.

Ping itself will print request timeouts, because there is no tunnel endpoint responding to your ping requests.

这篇关于使用Python与MAC OSX(Lion)的TUN \ TAP接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆