gpt4 book ai didi

python - 使用 Python 与 TUN\TAP for MAC OSX (Lion) 接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 21:40:32 27 4
gpt4 key购买 nike

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

修改了第一行以反射(reflect)司机的真实位置。原来是

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 驱动程序

最佳答案

OSX tun/tap 驱动程序似乎有点不同。 Linux 示例动态分配一个 tun 接口(interface),这在 OSX 中不起作用,至少以相同的方式。

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

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

要将其配置为点对点接口(interface),请键入:

$ sudo ifconfig tun12 10.12.0.2 10.12.0.1

请注意,tun12 接口(interface)仅在 /dev/tun12 打开时可用,即程序运行时。如果中断程序,你的tun界面就会消失,下次运行程序时需要重新配置。

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

$ ping 10.12.0.1

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

关于python - 使用 Python 与 TUN\TAP for MAC OSX (Lion) 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13035220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com