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

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

Для начала написания сканера сети выберем китайскую производственную методику. Посмотрим на тот, экземпляр, что есть в наличии у мастеров своего дела, и сделаем что-то похожее на этот экземпляр. Затем допилим, до точим до того, что нам нужно. В качестве первоначального примера выберем линуксовый netdiscover. В процессе нашей работы мы конечно сделаем его мультисистемным. Вводим в терминале: netdiscover –r 192.168.0.1/24 и получаем: Первым нашим шагом будет примерно такой же результат. Сначала разберемся, как устройства в локальной сети находят друг друга. Допустим, у нас есть гипотетическая локальная сеть, в которой имеются ноутбук, роутер, два стационарных компьютера и мобильный телефон. Если адрес этой локальной сети 192.168.0.0, а маска 255.255.255.0, то она обладает широковещательным адресом 192.168.0.255, который «слушают» все устройства. Обмен данными между устройствами происходит посредством MAC-адреса. Если устройству 1 нужно обмениваться данными с устройством 3 и оно зна

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

В качестве первоначального примера выберем линуксовый netdiscover.

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

В процессе нашей работы мы конечно сделаем его мультисистемным.

Вводим в терминале:

netdiscover –r 192.168.0.1/24

и получаем:

результат работы netdiscover
результат работы netdiscover

Первым нашим шагом будет примерно такой же результат.

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

Состав гипотетической локальной сети
Состав гипотетической локальной сети

Если адрес этой локальной сети 192.168.0.0, а маска 255.255.255.0, то она обладает широковещательным адресом 192.168.0.255, который «слушают» все устройства. Обмен данными между устройствами происходит посредством MAC-адреса. Если устройству 1 нужно обмениваться данными с устройством 3 и оно знает его IP-адрес (в нашем случае это 192.168.0.61), то устройству 1 все равно нужно знать MAC-адрес устройства 3.

Для этого, устройство 1 посылает запрос по протоколу ARP на широковещательный адрес: “У кого IP -адрес 192.168.0.61 ?

ARP (Address Resolution Protocolпротокол определения адреса). Он предназначен для определения MAC-адреса устройства по его IP-адресу.

Т.к. запрос послан по широковещательному адресу, его получат все устройства, но устройства, у которых адрес отличен от 192.168.0.61 проигнорируют этот запрос.

Устройство 3 же, обязано отправить ARP – ответ: “У меня IP-адрес 192.168.0.61. Мой MAC-адрес CC:CC:CC:CC:CC:CC ”. Теперь устройство 1 может обмениваться данными с устройством 3.

Таким образом наш сканер должен посылать ARP-запросы на широковещательный адрес: «У кого такой-то адрес?» начиная с адреса 192.168.0.1 и заканчивая 192.168.0.254. Если устройство на запрашиваемом IP-адресе есть – оно ответит нам и сообщит нам свой MAC-адрес.

Наконец мы дошли до программирования. Для работы с ARP-запросами нам необходимо скачать и установить модуль scapy. В стандартном пакете Python его нет.

Кроме того, если Вы используете 32-битную Windows, Вам нужно установить WinPcap – по умолчанию она отсутствует.

WinPcap — низкоуровневая библиотека 32-битных систем Windows, для взаимодействия с драйверами сетевых интерфейсов. Она позволяет захватывать и передавать сетевые пакеты в обход стека протоколов.

Импортируем scapy.all и создаем функцию scanner,которая принимает диапазон ip-адресов и используем её метод arping() – он будет посылать ARP-запросы к указанному диапазону IP-адресов:

Простейший код сканера сети
Простейший код сканера сети

Результат работы программы:

В результате мы получаем IP-адреса и MAC-адреса устройств локальной сети
В результате мы получаем IP-адреса и MAC-адреса устройств локальной сети

Начало положено. Продолжение следует….

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

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

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

Следующая часть:

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

База знаний:

Методы: .arping()

Модули: scapy

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