На данный момент наш скрипт умеет составлять и собирать ARP-запросы, отправлять их на все возможные ip-адреса локальной сети, а также захватывать от них ответы.
Он запоминает в один список адреса, от которых мы получили ответ и в другой список - не занятые ip-адреса. Однако помимо нужных нам данных - мы получаем и сохраняем много не нужных пользователю данных. Все эти данные нужны нам в процессе разработки скрипта, для того чтобы понимать как происходит процесс. Пользователя же интересуют лишь конкретные ip-адреса и MAC-адреса устройств, которые находятся на данный момент в сети.
Сначала избавимся от списка не отвечающих ip-адресов. Строку:
answer_yes, answer_no = scapy.all.srp(arp_request_broadcast, timeout=1)
заменим на:
answer_yes = scapy.all.srp(arp_request_broadcast, timeout=1) [0]
answer_no теперь нам больше не нужен, кроме того, используя [0] , мы указываем srp(), что она должна возвращать только первый список.
Теперь нам нужно спарсить нужные значения из строк ответа. Причем следует учесть, что summary() выдает только основные поля ответа. Он не учитывает все поля, а они нам необходимы для парсинга. Чтобы увидеть ответ полностью переберем список в цикле for:
Они выглядят так:
Обращаем внимание:
(<Ether dst=ff:ff:ff:ff:ff:ff type=ARP |<ARP pdst=192.168.0.61 |>>, <Ether dst=74:e5:43:5f:00:bf src=08:3d:88:ba:a5:77 type=ARP |<ARP hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=08:3d:88:ba:a5:77 psrc=192.168.0.61 hwdst=74:e5:43:5f:00:bf pdst=192.168.0.29 |>>)
Ответ разбит на два элемента - они разделены запятой. Во втором элементе ip-адрес устройства равен полю psrc , а его MAC-адрес полю hwsrc
Поэтому обращаемся не ко всему элементу, а к его подэлементу и соответствующему полю:
print (element[1].psrc)
print (element[1].hwsrc)
ответ - как раз то, что нам нужно:
Продолжение следует….
Конструктивная критика приветствуется.
Эта статья была полезной? Поставьте лайк и поделитесь с друзьями в социальных сетях!
Оставьте отзывы и замечания!
Предыдущая часть:
Программируем сканер локальной сети. Часть 4
База знаний:
Методы: .summary(), srp(), sr()
Модули: scapy
Понятия: Протокол ARP