使用Python与MAC OSX(Lion)的TUN \ TAP接口 [英] Interfacing with TUN\TAP for MAC OSX (Lion) using Python
问题描述
我找到了以下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屋!