Можем ли мы использовать функцию srp() для ICMP-пакета уровня 3? Я вижу, что когда мы создаем пакет запроса эхо-запроса ICMP и используем sr() для отправки/получения, мы НЕ видим, что он отправляется из интерфейса, следовательно, нет ответа от адресата. Но тот же пакет, если мы используем функцию srp(), видим ответ. Когда мы должны использовать sr() и когда srp()? В документации, о которой говорится, sr() используется для пакета L3 и srp() для использования в L2? Но в моем случае я не уверен, почему sr() не работает для ICMP-пакета? Могут ли некоторые эксперты помочь мне разобраться?отправка ICMP-пакетов в scapy и выбор правильного интерфейса
Также может кто-то сообщить, если аргумент «iface» необходим всегда. Без этого, как scapy узнает, через какой интерфейс он должен отправить пакет?
Случай 1: стер функция() с IFACE в качестве аргумента:
sr(icmp,iface="eth0")
Begin излучение:
WARNING: Mac address to reach destination not found. Using broadcast.
Finished to send 1 packets.
^C
Received 0 packets, got 0 answers, remaining 1 packets
(<Results: TCP:0 UDP:0 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:1 Other:0>)
Выше я не вижу никакого ответа ICMP от IP 192.168.25.1
Корпус 2: функция sr() без iface:
sr(icmp)
.Begin emission:
......WARNING: Mac address to reach destination not found. Using broadcast.
.Finished to send 1 packets.
...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^C
Received 887 packets, got 0 answers, remaining 1 packets
(<Results: TCP:0 UDP:0 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:1 Other:0>)
Если вы видите выше, полученные пакеты больше, но я не вижу ответа ICMP.
Случай 3: Отправка пакета ICMP с SRP() вместо стер():
srp(icmp,iface="eth0")
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
(<Results: TCP:0 UDP:0 ICMP:1 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
Здесь я использовал SRP() функцию вместо стер() функции, и теперь я вижу, что эхо-запрос ICMP был отправлен правильно, и я также получил ответ.
>>> icmp.show2()
###[ Ethernet ]###
dst: 02:00:00:11:01:03
src: 02:00:20:ee:64:01
type: 0x800
###[ IP ]###
version: 4L
ihl: 5L
tos: 0x0
len: 28
id: 1
flags:
frag: 0L
ttl: 64
proto: icmp
chksum: 0xc78c
src: 192.168.25.2
dst: 192.168.25.1
\options\
###[ ICMP ]###
type: echo-request
code: 0
chksum: 0xf7ff
id: 0x0
seq: 0x0
>>>
Great Yoel. Я создал ICMP-пакет без предоставления Ether(), и я заметил, что sr() работает, как упоминалось. Я также заметил, что таблица маршрутизации в scapy не синхронизирована. Я перепробовал его, и теперь он принял правильный выход iface для sr(). Спасибо за ваш быстрый ответ. – Pradeep