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
Само за да бъде ясно – искате Scapy да получава и обработва 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