Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从通过网桥连接到MAVLAN的TAP设备读写?_Python_Linux_Networking_Vpn_Tunnel - Fatal编程技术网

Python 如何从通过网桥连接到MAVLAN的TAP设备读写?

Python 如何从通过网桥连接到MAVLAN的TAP设备读写?,python,linux,networking,vpn,tunnel,Python,Linux,Networking,Vpn,Tunnel,让我描述一下我的设置 使用Debian。我已将eth0连接到我的家庭路由器。从eth0创建一个MACVLAN(名为m0)。使用tunctl创建TAP设备(名为tap0)。最后,使用bridge utils创建一个网桥(名为br0),m0和tap0都连接到该网桥 使用ping,我能够从tcpdump捕获一个示例ICMP请求。首先,我使用dhclient从家庭路由器获取br0 IP地址。接下来,我从br0 ping路由器。然后我在tcpdump中捕获这个数据包 接下来,我用Python编写tap0接

让我描述一下我的设置

使用Debian。我已将eth0连接到我的家庭路由器。从eth0创建一个MACVLAN(名为m0)。使用tunctl创建TAP设备(名为tap0)。最后,使用bridge utils创建一个网桥(名为br0),m0和tap0都连接到该网桥

使用ping,我能够从tcpdump捕获一个示例ICMP请求。首先,我使用dhclient从家庭路由器获取br0 IP地址。接下来,我从br0 ping路由器。然后我在tcpdump中捕获这个数据包

接下来,我用Python编写tap0接口。一旦我得到文件对象,我就从以前复制示例ICMP请求(它的IP地址从br0到192.168.1.1,即家庭路由器),将其转换为二进制,然后将其写入文件对象

使用tcpdump,我可以看到我在Python中写入文件对象的数据包与预期的一样——ICMP回显请求。我可以在链中的每个接口(tap0、br0、m0、eth0)上看到这个数据包

这是我试图解决的问题。除了使用tcpdump的tap0(br0、m0、eth0),我可以在链中的每个接口上看到ICMP echoreply。理想情况下,我希望从Python中的file对象中读取,以查看ICMP回送回复。我所拥有的东西不起作用是有道理的,因为网桥是在应答包中具有IP地址的网桥。如何修改此设置,以便可以从tap0进行读写

然而,dhclient不能与tap0一起工作。我能想象这种工作方式的唯一方法就是找到一种方法,给tap0一个路由器已知的IP地址。我希望我不必用Python实现通过tap0文件对象进行写入的dhclient

这种设置的灵感来源于虚拟机所需的网络。我正在尝试使用用户空间程序所需的系统基础设施,将数据写入线路,并能够从线路中读取数据

感谢您的回复,并为这篇有点冗长的帖子感到抱歉

从终端到:

  • 创建macvlan m0:
    sudo ip链路添加链路eth0 m0类型macvlan
  • 创建TAP tap0:
    sudo tunctl-u root
  • 网络设备初始化:
    sudo ip addr addr add 0.0.0 dev m0/tap0
    sudo ip link set dev m0/tap0 promisc on
  • 创建网桥并将其链接到m0和tap0:
    sudo brctl addbr br0
    sudo brctl addif br0 tap0/m0
    sudo ip link set dev br0 up
    sudo dhclient br0
  • 在Python中,我所做的工作与


    从那里我就有了一个文件对象,它引用了我用os.fdopen(tap0_FD,'r+b')打开的tap0接口,我可以对其进行写入和读取,如上面的解释所示。

    您能发布到我们可以看到的示例代码的链接吗?我也许能更好地解释一下你在这个问题上做了什么。詹姆斯,谢谢你让我知道。我写了一点,但我想我的文章主要是想展示我的界面结构,并用我的例子来说明我希望我的结构做什么,因为我知道我必须改变它。似乎我正在尝试做的事情应该被一些虚拟机网络和虚拟专用网的爱好者所了解。