3

我一直在尝试使用 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接口的设置上。那还是我对这些东西的平庸理解。

谢谢

4

1 回答 1

1

在 ethertap 接口上,如果 ARP 缓存仍然有否定(不完整)条目,您可能实际上不会看到传出流量。否则,您可能只看到一个 ARP 数据包。

实际上,我认为这与python无关。

您是否尝试过 ping - 您看到 icmp 数据包出去了吗?arp 表是什么样的?

于 2012-01-24T22:38:57.053 回答