В первой части мы создали простейший вариант сканера локальной сети, однако его вывод значительно отличается от вывода netdiscover. Сейчас мы глубже копнем в модуль scapy и посмотрим в каком виде посылаются ARP-запросы, какие поля данных при этих запросах мы можем использовать. Создаем экземпляр ARP-запроса мы можем получить с помощью метода модуля scapy - scapy.all.ARP(). Применив функцию summary() мы увидим, как выглядит сам ARP-запрос: summary() выводит нам следующее: Т.е. по ARP не форматированный экземпляр спрашивает: «who has 0.0.0.0» ? -"у кого ip-адрес – 0.0.0.0"?) и указывает что ответ нужно отправить по ip-адресу 192.168.0.29 (это наш ip-адрес ). Теперь разберемся, какими переменными обладаем экземпляр .ARP(). Для этого будет использовать функцию scapy – .ls(). scapy.all.ls (scapy.all.ARP()): ls() выдает нам все переменные доступные через .ARP(): Нетрудно заметить, что за запрашиваемый ip-адрес отвечает поле - pdst. В дальнейшем, оперируя с pdst мы сможем сканироват