У меня на компьютере установлено две карты Ethernet, поэтому у меня два интерфейса. Эти два интерфейса подключены к двум интерфейсам маршрутизатора. Такие что:
PC_INT_A --- Сеть1 ---> ROUTER_INT_1
PC_INT_B --- Сеть2 ---> 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')
Приведенный выше код выводит меня следующим образом:
Begin emission:
*Finished sending 1 packets.
Received 1 packets, got 1 answers, remaining 0 packets
Begin emission:
Finished sending 1 packets.
..........................................................................
Он продолжает ждать ответа от интерфейса eth1
.
Если я меняю порядок отправки пакетов в коде, как будто я отправляю пакет сначала на eth1
. Я получаю ответ от eth1
, и он продолжает ждать ответа от eth0
.
Я также проверяю Wireshark, но не получаю никакого пакета для второго интерфейса.
Я тоже пробовал то же самое с отправкой ICMPv6EchoRequest
, он ведет себя так же.
Может кто-нибудь сказать мне, как одновременно работать с несколькими сетями, используя scapy. Я использую Scapy версии 2.4.2 с Python 3.4?