使用Python向tap接口发送数据包
我一直在尝试用Python向一个tap接口发送数据包。我用Wireshark监控这个tap接口,但没有收到任何数据包。我这样做主要是为了帮助我理解VPN、以太网桥接和Python中的套接字编程。
我的系统设置如下:
Ubuntu Desktop 11.10
Python 2.7
eth0 ip: 192.168.1.6
tap0 ip: 10.0.0.1
我首先这样设置tap接口:
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接口,并创建一个内核路由规则,指向10.0.0.1/24,通过tap0。
这是路由表:
$ 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上运行sendto命令,同时用Wireshark监控。现在,我的网络上没有10.0.0.2这个主机,但我至少应该能看到一些从tap0接口发出的流量。我在Windows上也做过这个,似乎一切正常。
我只能想到问题可能出在Linux下tap0接口的设置上。或者是我对这些东西理解得不够好。
谢谢
1 个回答
1
在ethertap接口上,如果ARP缓存里还有一个负面的(不完整的)记录,你可能实际上看不到发出的流量。否则,你可能只会看到一个ARP数据包。
我觉得这和python没有关系。
你试过ping一下吗?你能看到一个icmp数据包发出去吗?ARP表看起来怎么样?