Scapy на PlanetLab

Кому-нибудь удавалось использовать Scapy на узле PlanetLab (под управлением Fedora 12)?

Мне известно об ограничениях для безопасных необработанных сокетов, но кажется, что я могу отправлять пакеты через Scapy, просто установив conf.L3socket=L3RawSocket. Что касается приема пакетов, мне не удалось заставить Scapy работать, поэтому я просто использую tcpdump.

TCP и ICMP работают:

  • Эхо-запросы ICMP получают ответный эхо-ответ
  • Эхо-запросы ICMP с низким TTL возвращают сообщение об истечении времени
  • Пакеты TCP SYN возвращают пакет TCP RST
  • Пакеты TCP с низким TTL возвращают сообщение об истечении времени

UDP не:

  • Пакеты UDP на закрытый порт вызывают сообщение ICMP о недоступности порта, но это сообщение не возвращается на мою ленту. Tcpdump видит только UDP-пакет.
  • то же самое для пакетов UDP, истекающих на своем пути.

Нужно ли установить какие-либо дополнительные параметры для получения этих ICMP-пакетов?


person Ricky Robinson    schedule 25.09.2013    source источник
comment
Есть ли у вас права root на узле?   -  person RyPeck    schedule 25.09.2013
comment
да, я запускаю python с sudo python, иначе Scapy не смог бы отправить что-либо на уровне 3   -  person Ricky Robinson    schedule 25.09.2013
comment
Для ясности - вы хотите, чтобы Скапи получал и обрабатывал ICMP-пакеты?   -  person RyPeck    schedule 27.09.2013
comment
Нет, я предпочитаю собирать метки времени с помощью tcpdump. Проблема, с которой я сталкиваюсь, заключается в том, что когда я отправляю пакеты UDP с помощью scapy, сообщения ICMP, связанные с этими пакетами, не возвращаются в мой фрагмент. Это означает, что механизм, который сопоставляет входящие пакеты с частями на уровне узла, не может назначать эти ICMP-пакеты моим UDP-пакетам и доставлять их мне. Удивительно то, что я могу отправлять TCP и ICMP и получать все связанные ответы, но с UDP это не работает.   -  person Ricky Robinson    schedule 28.09.2013


Ответы (1)


Не уверен, что это поможет, но по моему опыту, чтобы получать пакеты в scapy, вы должны использовать метод sr или sr1:

sr1 (IP (dst = "192.168.1.8") / UDP (dport = 60112))

Начало выброса: ... Завершена отправка 1 пакета. Получено 4 пакета, получено 1 ответ, осталось 0 пакетов

<IP  version=4L ihl=5L tos=0xc0 len=56 id=47804 flags= frag=0L ttl=64 proto=icmp chksum=0x6274 src=192.168.1.8 dst=192.168.1.2 options='' |<ICMP  type=dest-unreach code=3 chksum=0x59eb unused=0 |<IPerror  version=4L ihl=5L tos=0x0 len=28 id=1 flags= frag=0L ttl=64 proto=udp chksum=0x1dfc src=192.168.1.2 dst=192.168.1.8 options='' |<UDPerror  sport=domain dport=60112 len=8 chksum=0xb803 |>>>>

Функция sr () предназначена для отправки пакетов и получения ответов. Функция возвращает пару пакетов и ответов, а также пакеты без ответа. Функция sr1 () - это вариант, который возвращает только один пакет, который ответил на отправленный пакет (или набор пакетов). -Источник

person Peter Party Bus    schedule 25.10.2013
comment
да да, я хорошо знаю sr в scapy. :) Он просто использует некоторые функции уровня 3, которые напрямую не доступны на PlanetLab. Возможно, мне придется изменить некоторые внутренние настройки, но поскольку для измерений rtt метки времени scapy не так точны, я просто использую tcpdump. - person Ricky Robinson; 28.10.2013
comment
Ах я вижу. Извините, я не думаю, что могу ответить на ваш вопрос. Или, может быть, я не понимаю проблемы, но, насколько я понимаю, ответы ICMP напрямую не сопоставляются с пакетами UDP, поскольку пакеты UDP не имеют порядковых номеров, они по своей сути ненадежны. Поэтому, когда вы говорите о сообщениях ICMP, связанных с этими пакетами, я не понимаю, что вы имеете в виду. Возможно, ваши знания превосходят мое понимание. - person Peter Party Bus; 28.10.2013
comment
Сообщения ICMP, связанные с оскорбительными сообщениями UDP. Проще говоря, пакет UDP (как и пакет TCP или ICMP) может генерировать сообщение об ошибке ICMP маршрутизатором. Когда такое сообщение об ошибке генерируется TCP-пакетом, я его получаю. Когда это пакет UDP, я этого не делаю. - person Ricky Robinson; 29.10.2013