让我描述一下我的设置。在
使用Debian。我已经把eth0连接到我的家庭路由器。从eth0创建MACVLAN(名为m0)。使用tunctl创建一个TAP设备(名为tap0)。最后,使用bridge utils创建一个桥(名为br0),并且m0和tap0都连接到该桥。在
使用ping,我能够从tcpdump捕获一个ICMP请求示例。首先,我使用dhclient从家庭路由器获得一个IP地址。接下来,我从br0 ping路由器。然后在tcpdump中捕获这个包。在
接下来,我用Python编写tap0接口。一旦我得到了file对象,我就复制前面的示例ICMP请求(它的IP地址从br0到192.168.1.1,这是家庭路由器),将其转换为二进制,然后将其写入file对象。在
使用tcpdump,我可以看到我在Python中写入file对象的数据包与预期的一样——一个ICMP回送请求。我可以在链中的每个接口(tap0、br0、m0、eth0)上看到这个包。在
这是我要解决的问题。除了使用tcpdump的tap0(br0、m0、eth0),我可以在链中的每个接口上看到ICMP echo回复。理想情况下,我希望从Python中的file对象读取ICMP echo响应。我所拥有的不起作用是有道理的,因为网桥是在回复包中有IP地址的网桥。如何修改此设置,使我可以从TAP00读写?在
然而,dhclient不支持tap0。我能想到的唯一方法就是找到一种方法,给tap0一个路由器知道的IP地址。我希望我不必在Python中实现通过tap0文件对象写入的dhclient。在
这个设置的灵感来自VMs中需要的网络。我正在尝试使用一个用户空间程序所需的系统基础设施来向线路写入数据,并能够从线路上读回数据。在
谢谢你的回复,也很抱歉这篇文章有些冗长。在
从终端到:
sudo ip link add link eth0 m0 type macvlan
sudo tunctl -u root
sudo ip addr add 0.0.0.0 dev m0/tap0
sudo ip link set dev m0/tap0 promisc on
sudo brctl addbr br0
sudo brctl addif br0 tap0/m0
sudo ip link set dev br0 up
sudo dhclient br0
在Python中,我所做的事情与https://gist.github.com/glacjay/585369的初始化步骤类似
从这里我有一个file对象,它引用了我用os.fdopen(TAP0_FD, 'r+b')
打开的tap0接口,我可以写入和读取,如上面的解释所示。在
目前没有回答
相关问题 更多 >
编程相关推荐