Можно ли настроить Scapy для прослушивания сетевого трафика и отправки созданного пакета после получения пакета с определенными параметрами? Я имею в виду, например, что Scapy прослушивает сетевой трафик на eth0, и в случае получения пакета ICMP «эхо-запрос» от исходного IP-адреса 10.10.44.3 Scapy отправляет TCP SYN-пакет на порт 34 на IP-адрес 192.168.2.1, используя 8.8.8.8 в качестве источник. Возможна ли такая настройка с помощью Scapy?

1
Martin 19 Окт 2013 в 06:05

1 ответ

Лучший ответ

Да.

Используя функцию sniff(), вы можете предоставить параметр для опции stop_filter.

>>> print sniff.__doc__
Sniff packets
sniff([count=0,] [prn=None,] [store=1,] [offline=None,] [lfilter=None,] + 
      L2ListenSocket args) -> list of packets

...clipped...

stop_filter: python function applied to each packet to determine
             if we have to stop the capture after this packet
             ex: stop_filter = lambda x: x.haslayer(TCP)

Если функция вернет 1, sniff остановится, и вы сможете продолжить с любой логикой, какой захотите.

0
RyPeck 24 Окт 2013 в 20:31
Насколько я понимаю, я могу указать лямбда-функцию Python для параметра stop_filter. Какие возможные лямбда-функции Python я могу указать? Я знаю, что stop_filter=lambda x: x.summary() работает или stop_filter=lambda x: x.show() работает, но каковы другие возможности? Поскольку я хотел бы отправить ответ напрямую, я думаю, что-то вроде stop_filter=lambda x: x.send(IP(src="8.8.8.8", dst="192.168.2.1")) было бы идеально.
 – 
Martin
10 Дек 2013 в 19:53
Вы можете создать и указать обычную функцию, не обязательно лямбда.
 – 
RyPeck
10 Дек 2013 в 20:14
Я думаю, что придерживаюсь лямбда-функций, поскольку они кажутся проще. Однако можно ли сделать что-то вроде stop_filter=lambda x: x.send(IP(src="8.8.8.8", dst="192.168.2.1")/ICMP)?
 – 
Martin
11 Дек 2013 в 22:18
Было бы лучше использовать stop_filer, как задумал разработчик, чтобы прекратить обнюхивание, а затем следовать любой логике, которую вы хотите использовать.
 – 
RyPeck
11 Дек 2013 в 22:28