Найти тему
Практика Python

Программируем сканер локальной сети. Часть 2

В первой части мы создали простейший вариант сканера локальной сети, однако его вывод значительно отличается от вывода netdiscover.

netdiscover  входит в стандартный комплект ОС Kali Linux
netdiscover входит в стандартный комплект ОС Kali Linux

Сейчас мы глубже копнем в модуль scapy и посмотрим в каком виде посылаются ARP-запросы, какие поля данных при этих запросах мы можем использовать.

Создаем экземпляр ARP-запроса мы можем получить с помощью метода модуля scapy - scapy.all.ARP(). Применив функцию summary() мы увидим, как выглядит сам ARP-запрос:

Как выглядит ARP-запрос - код
Как выглядит ARP-запрос - код

summary() выводит нам следующее:

Как выглядит ARP-запрос - вывод
Как выглядит ARP-запрос - вывод

Т.е. по 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()):

Какие поля у .ARP() - код
Какие поля у .ARP() - код

ls() выдает нам все переменные доступные через .ARP():

Какие поля у .ARP() - вывод
Какие поля у .ARP() - вывод

Нетрудно заметить, что за запрашиваемый ip-адрес отвечает поле - pdst. В дальнейшем, оперируя с pdst мы сможем сканировать не только подсеть, в которую подключен нам компьютер, но и любую подсеть. Кроме того, уже не нужно будет прописывать сканируемый диапазон ip-адресов в программном коде – он будет передаваться сканеру как аргумент командной строки.

Итак, удаляем из кода функцию ls() - она сделала свое дело и пока больше нам не нужна и подставляем аргумент pdst в экземпляр ARP-запроса:

Итоговый экземпляр ARP-запроса - код
Итоговый экземпляр ARP-запроса - код

Теперь у нас есть пакет, который спрашивает: «Чей ip-адрес 192.168.0.1»?

Итоговый экземпляр ARP-запроса - вывод
Итоговый экземпляр ARP-запроса - вывод

Продолжение следует….

Конструктивная критика приветствуется.

Эта статья была полезной? Поставьте лайк и поделитесь с друзьями в социальных сетях!

Оставьте отзывы и замечания!

Предыдущая часть:

Программируем сканер локальной сети. Часть 1

База знаний

Методы: .ls(), .summary()

Объекты: .ARP()

Модули: scapy

Понятия: Протокол ARP