我一直在尝试使用 python 将数据包发送到 Tap 接口。我正在使用wireshark 监控tap 接口,但没有收到任何数据包。我这样做主要是为了帮助我理解python中的vpns、以太网桥接和套接字编程。
我的系统设置如下:
Ubuntu Desktop 11.10
Python 2.7
eth0 ip: 192.168.1.6
tap0 ip: 10.0.0.1
我首先按如下方式设置水龙头:
sudo openvpn --mktun --dev tap0
sudo ifconfig tap0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 promisc up
这将启动 tap0 接口并通过 tap0 创建到 10.0.0.1/24 的内核路由规则。
这是路由表:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 * 255.255.255.0 U 0 0 0 tap0
192.168.1.6 * 255.255.255.0 U 1 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
接下来我启动 python 交互并创建一个简单的 UDP 套接字。
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto('helloworld',('10.0.0.2',12345))
我在 tap0 上运行带有 Wireshark 监控的 sendto 命令。现在,我的网络上没有 10.0.0.2 的主机,但我至少应该在 tap0 接口上看到一些传出流量。我已经在 Windows 中复制了它,它似乎工作正常。
我只能认为问题出在linux下tap0接口的设置上。那还是我对这些东西的平庸理解。
谢谢