gpt4 book ai didi

python - 当您连接到 2 个网络时,如何使用 scapy 通过特定接口(interface)发送数据包?

转载 作者:行者123 更新时间:2023-12-01 08:07:07 24 4
gpt4 key购买 nike

我的电脑上安装了两个以太网卡,因此有两个接口(interface)。这两个接口(interface)分别连接到Router的两个接口(interface)。这样:

PC_INT_A --- 网络1 ---> ROUTER_INT_1

PC_INT_B --- 网络2 ---> ROUTER_INT_2

所有接口(interface)均已完全配置用于 IPv6 通信。 Ping6 通过命令行运行良好。

但是当我尝试通过 scapy 发送时,两个网络都已连接。我只能发送代码中的第一个接口(interface)。或者我必须断开一个特定的网络。

参见下面的代码:

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')

上面的代码给出的输出如下:

Begin emission:
*Finished sending 1 packets.

Received 1 packets, got 1 answers, remaining 0 packets
Begin emission:
Finished sending 1 packets.
..........................................................................

它一直等待eth1接口(interface)的答复。

如果我在代码中更改数据包发送的顺序,就像我首先将数据包发送到 eth1 一样。我收到 eth1 的答复,它一直在等待 eth0 的答复。

我也检查了wireshark,但我没有收到第二个接口(interface)的任何数据包。

我也尝试过发送ICMPv6EchoRequest,它的行为方式相同。

有人可以告诉我,如何使用 scapy 同时处理多个网络。我正在使用 scapy 版本 2.4.2 和 python 3.4?

最佳答案

嗨!

在 Scapy 中,有两种发送数据包的方式。 “第 3 层方式”使用内部路由表 (conf.route),“第 2 层方式”在给定接口(interface)上发送数据包 (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')

关于python - 当您连接到 2 个网络时,如何使用 scapy 通过特定接口(interface)发送数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55488099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com