Найти в Дзене
Практика Python

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

Доброго время суток, уважаемый читатель! На данный момент мы собрали пакеты-запросы для отправки на широковещательный адрес. Сейчас мы разберемся как отправлять эти пакеты, а также как принимать и обрабатывать ответы. Для того, чтобы отправить пакет, в scapy предусмотрены функции sr() и srp(). sr() в нашем конкретном примере использовать не получиться, т.к адрес широковещательного канала в Ether() мы прописали вручную, а sr() этого не позволяет. Поэтому используем srp() : scapy.all.srp(arp_request_broadcast) Функция srp() возвращает два списка: в первом списке содержится пара (посланный пакет, полученный ответ), а во втором списке содержится список адресов ответ от которых не был получен. Сохраним значения полученных ответов в answer_yes, а список адресов, ответа от которых мы не получили в answer_no. И наша строка кода изменится до: answer_yes, answer_no = scapy.all.srp(arp_request_broadcast) Важным аргументом в srp() является аргумент timeout. Он указывает сколько

Доброго время суток, уважаемый читатель!

На данный момент мы собрали пакеты-запросы для отправки на широковещательный адрес. Сейчас мы разберемся как отправлять эти пакеты, а также как принимать и обрабатывать ответы.

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

Для того, чтобы отправить пакет, в scapy предусмотрены функции sr() и srp(). sr() в нашем конкретном примере использовать не получиться, т.к адрес широковещательного канала в Ether() мы прописали вручную, а sr() этого не позволяет. Поэтому используем srp() :

scapy.all.srp(arp_request_broadcast)

Функция srp() возвращает два списка: в первом списке содержится пара (посланный пакет, полученный ответ), а во втором списке содержится список адресов ответ от которых не был получен. Сохраним значения полученных ответов в answer_yes, а список адресов, ответа от которых мы не получили в answer_no. И наша строка кода изменится до:

answer_yes, answer_no = scapy.all.srp(arp_request_broadcast)

Важным аргументом в srp() является аргумент timeout. Он указывает сколько секунд нужно ждать ответа от устройства. Если его не задать, то от несуществующего устройства srp() ответ будет ждать бесконечно. зададим время ожидания 1 секунду:

answer_yes, answer_no = scapy.all.srp(arp_request_broadcast, timeout=1)

если в течении 1 секунды srp() не получит ответа, она перейдет к отправке запроса на следующий адрес.

Теперь с помощью summary() посмотрим на списки, заполненные функцией srp()

Смотрим на результат опроса устройств сети - код
Смотрим на результат опроса устройств сети - код

полученные ответы:

ip- адреса и MAC-адреса устройств, подключенных к нашей подсети
ip- адреса и MAC-адреса устройств, подключенных к нашей подсети

и список ip-адресов, которые не заняты какими-либо устройствами

Список не занятых ip- адресов нашей подсети
Список не занятых ip- адресов нашей подсети

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

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

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

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

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

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

База знаний:

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

Модули: scapy

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