使用多个网卡时,无法使用全局地址通过 scapy 进行通信



我在 ubuntu 3 机器上使用 14.04 个网卡。我正在尝试使用三个不同的网卡同时与 3 个不同的网络通信。我想使用 IPv6 全局地址。以下是网络结构。


Interface_A (8003::2) <-----> Get0 (8003::1)
Interface_B (8001::2) <-----> Get1 (8001::1)
Interface_C (8002::2) <-----> Get2 (8002::1)

当我使用 IPv6 链路层地址时,同时通信正在工作。 即下面的代码工作成功。

dst_a="FE80::C1:4160" # get0
dst_c="FE80::3617:EBFF:FEAE:DEB4" # get2
src_a="FE80::3617:EBFF:FEAE:DEB5" # my_pc_interfac_A 
src_c="FE80::523E:AAFF:FE08:8AAF" # my_pc_interface_C
IFACE_A = "eth0"
IFACE_C = "eth2"
echo_a = IPv6(src=src_a, dst=dst_a, nh=58) / ICMPv6EchoRequest(data='aaaa')
echo_c = IPv6(src=src_c, dst=dst_c, nh=58) / ICMPv6EchoRequest(data='cccc')
conf.iface = IFACE_A
a = sr1(echo_a)
a.display()
conf.iface = IFACE_C
c = sr1(echo_C)
c.display()

虽然下面的代码不起作用,但只有 1st ping 成功 (echo_a(。对于下一个,我没有得到任何回应。当我只使用具有全局ipv6地址的interface_C(echo_c(时,echo_c也在工作。

dst_a_global="8003::1" # get0
dst_c_global="8002::1" # get2
src_a_global="8003::2" # my_pc_interfac_A 
src_c_global="8002::2" # my_pc_interface_C
IFACE_A = "eth0"
IFACE_C = "eth2"
echo_a = IPv6(src=src_a_global, dst=dst_a_global, nh=58) / ICMPv6EchoRequest(data='aaaa')
echo_c = IPv6(src=src_c_global, dst=dst_c_global, nh=58) / ICMPv6EchoRequest(data='cccc')
conf.iface = IFACE_A
a = sr1(echo_a)
a.display()
conf.iface = IFACE_C
c = sr1(echo_C)
c.display()

我只得到echo_a输出,echo_c没有响应。如果我先运行echo_c,我没有得到echo_a的响应。

我希望,对于两个回显请求,都应该有一个回显回复。我能够在所有接口上ping6。

尝试自己配置以太网层,看看它是否正常工作-

echo_a = Ether(src=YOUR_MAC, dst=33:33:00:01:00:03) / IPv6(src=src_a_global, dst=dst_a_global, nh=58) / ICMPv6EchoRequest(data='aaaa')
a = srp1(echo_a, iface=IFACE_A)

另外 - 我自己在使用具有多个接口的 IPv6 时遇到了一些问题(使用常规套接字而不是 Scapy 和 Windows(,看看您是否可以找到相关的东西(我想不出任何特别的东西,但也许无论如何它会有所帮助(-

  • Windows 不会从所有接口接收多播 IPv6 数据包
  • 通过特定网络接口发送 IPv6 组播数据包

最新更新