MSS*_*MSS 2 python networking ping scapy
我的 PC 上安装了两个以太网卡,因此有两个接口。这两个接口连接到路由器的两个接口。这样:
PC_INT_A --- Network1 ---> ROUTER_INT_1
PC_INT_B --- Network2 ---> ROUTER_INT_2
所有接口都针对 IPv6 通信进行了全面配置。Ping6 通过命令行运行良好。
但是当我尝试通过 scapy 发送时,两个网络都已连接。我只能在代码中发送第一个接口。或者我必须断开一个特定的网络。
见下面的代码:
def ns_with_ll(src, dst):
base = IPv6(src=src, dst=dst, nh=58, hlim=255)
ns = ICMPv6ND_NS(tgt=dst)
ll = ICMPv6NDOptSrcLLAddr()
pkt = base / ns / ll
return pkt
if __name__ == '__main__':
SRC_A = 'IPV6_ADDR_OF_ETH0'
SRC_B = 'IPV6_ADDR_OF_ETH1'
DST_1 = 'IPV6_ADDR_ROUTER_INT_1'
DST_2 = 'IPV6_ADDR_ROUTER_INT_2'
ns_a = ns_with_ll(SRC_A, DST_1)
ns_b = ns_with_ll(SRC_B, DST_2)
sr(ns_a, iface='eth0')
sr(ns_b, iface='eth1')
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我如下输出:
Begin emission:
*Finished sending 1 packets.
Received 1 packets, got 1 answers, remaining 0 packets
Begin emission:
Finished sending 1 packets.
..........................................................................
Run Code Online (Sandbox Code Playgroud)
它一直在等待eth1界面的回答。
如果我在代码中更改数据包发送的顺序,就像我eth1首先发送数据包一样。我收到来自 的答复eth1,它一直在等待来自 的答复eth0。
我也签入了wireshark,但我没有收到第二个接口的任何数据包。
我也尝试过相同的发送ICMPv6EchoRequest,它的行为方式相同。
有人可以告诉我,如何使用 scapy.js 同时处理多个网络。我正在使用带有 python 3.4 的 scapy 版本 2.4.2?
你好!
在 Scapy 中,您有两种发送数据包的方式。“第 3 层方式”,使用内部路由表 ( conf.route),“第 2 层方式”,在给定接口(conf.iface默认)上发送数据包。
send()是“第 3 层”函数(因此它依赖于 Scapy 的路由表),sendp()而是“第 2 层”函数(它有一个iface=可选参数,conf.iface默认情况下会使用)。sr()和也是一样的srp()。
因此,在您的情况下,使用srp()代替sr()并提供Ether()图层应该可以工作:
if __name__ == '__main__':
[...]
srp(Ether() / ns_a, iface='eth0')
srp(Ether() / ns_b, iface='eth1')
Run Code Online (Sandbox Code Playgroud)