невозможно получить ответ фрагментированного эхо-запроса ICMP - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь отправить вручную большой эхо-запрос ICMP, поэтому я написал следующий код scapy:

frags = fragment(IP(dst=dst)/ICMP()/Raw(load=('x')*50000))


s = conf.L3socket(iface=iface)      #improve Sending performance (https://byt3bl33d3r.github.io/mad-max-scapy-improving-scapys-packet-sending-performance.html)

count = len(frags)                  #Count fragments
i = 0
maximum = count - 1                 
print "maximum: " + str(maximum)

#Send all Frags but the last
while i < maximum:
    print "i: " + str(i)
    s.send(frags[i]) 
    i = i + 1
answer = s.sr(frags[i]) # using sr(), to receive an answer
print(ans[0])

Не получается получить эхо-ответ ICMP.Ответ, который я получаю, всегда что-то типа

Получено 9 пакетов, получено 0 ответов, осталось 1 пакетов

Кто-то знает, что не так с моим кодом?

1 Ответ

0 голосов
/ 14 октября 2018

Существует множество причин, по которым это не сработает:

  • sr() означает «отправить, получить».Эта функция уже отправляет пакет, поэтому вам не нужно отправлять его ранее
  • sr() возвращает несколько ответов, что означает, что он не прекратится, если вы не выполните ^ C или не истечет время ожидания.Вы ищете sr1(), который возвращает при первом ответе
  • scapy не может (пока) дефрагментировать пакеты «в потоке».Когда вы звоните sr/sr1, он проверяет каждый пакет на возможный ответ, но его не будет, поскольку он не дефрагментирует поток.Для этого ответа вам нужно выполнить всю «проверку ответов» самостоятельно или найти другой способ.

В любом случае, я не знаю, ответит ли множество серверов на такой ICMP

...