同时使用相同端口相同IP地址的应用程序/协议

时间:2019-03-20 16:44:46

标签: python linux networking tcp namespaces

我在设备上只有一个接口,我需要同时从该接口发送流量。符合以下要求

src地址,目标地址,源端口,目标端口和协议必须相同

因此,在我的linux VM中,我使用名称空间,并按以下方式进行配置

ip netns eng51 ifconfig
eth1.51   Link encap:Ethernet  HWaddr 52:54:00:bd:68:c3
          inet addr:51.51.1.10  Bcast:51.51.1.255  Mask:255.255.255.0

ip netns exec eng52 ifconfig
eth1.52   Link encap:Ethernet  HWaddr 52:54:00:bd:68:c3
          inet addr:51.51.2.10  Bcast:51.51.2.255  Mask:255.255.255.0

ip netns exec eng522 ifconfig
eth1.522  Link encap:Ethernet  HWaddr 52:54:00:bd:68:c3
          inet addr:51.51.2.10  Bcast:51.51.2.255  Mask:255.255.255.0

ip netns exec eng511 ifconfig
eth1.511  Link encap:Ethernet  HWaddr 52:54:00:bd:68:c3
          inet addr:51.51.1.10  Bcast:51.51.1.255  Mask:255.255.255.0

所以我有一个脚本试图在目标名称空间上发送一些消息。我在目标名称空间和源名称空间上运行python SimpleHTTPServer,我使用python的套接字并将任何地址绑定到端口63999

sock.bind(('0.0.0.0',63999)) 

这样,我可以将源端口控制为始终为63999。现在,我可以在诸如此类的源名称空间上运行此脚本

ip netns eng51 abc_client.py 51.51.2.10
ip netns eng511 abc_client.py 51.51.2.10

但是我面临的问题是,即使我在2个独立的命名空间下启动tcp会话,端口63999也不会被认为是唯一的。当eng51名称空间下tcp会话正在进行中时,我启动eng522,则eng51会话停止,并说对等重置连接。

1 个答案:

答案 0 :(得分:0)

因此,我通过简单地使用多个接口,将VM的每个接口映射到名称空间来实现了这一目标。然后我可以在2个同时的会话中同时使用源端口63999

ip netns eng51 ifconfig eth1.51链接encap:以太网HWaddr 52:54:00:bd:68:c3           inet地址:51.51.1.10广播:51.51.1.255掩码:255.255.255.0

ip netns exec eng52 ifconfig eth2.52链接encap:以太网HWaddr 52:54:00:bd:68:c3           inet地址:51.51.2.10广播:51.51.2.255掩码:255.255.255.0

ip netns exec eng522 ifconfig eth3.522链接encap:以太网HWaddr 52:54:00:bd:68:c3           inet地址:51.51.2.10广播:51.51.2.255掩码:255.255.255.0

ip netns exec eng511 ifconfig eth4.511链接encap:以太网HWaddr 52:54:00:bd:68:c3           inet地址:51.51.1.10广播:51.51.1.255掩码:255.255.255.0

相关问题