Я хотел бы найти заданный MAC-адрес в своей сети, используя скрипт Python. У меня уже есть карта всех активных IP-адресов в сети, но я не могу понять, как определить MAC-адрес. Есть идеи?






Я не думаю, что есть встроенный способ получить это от самого Python.
У меня вопрос: как вы получаете IP-информацию из своей сети?
Чтобы получить его со своего локального компьютера, вы можете без труда проанализировать ifconfig (unix) или ipconfig (windows).
Зависит от вашей платформы. Если вы используете * nix, вы можете использовать команду arp для поиска MAC-адреса для данного IP-адреса (при условии, что IPv4). Если это не сработает, вы можете пропинговать адрес, а затем посмотреть, или, если у вас есть доступ к необработанной сети (с использованием BPF или какого-либо другого механизма), вы можете отправить свои собственные пакеты ARP (но это, вероятно, излишнее).
Если вам нужно решение на чистом Python, вы можете взглянуть на Scapy для создания пакетов (вам нужно отправить запрос ARP и проверить ответы). Или, если вы не против вызова внешней программы, вы можете использовать arping (в системах Un * x я не знаю эквивалента для Windows).
Кажется, что для Python нет собственного способа сделать это. Лучше всего проанализировать вывод «ipconfig / all» в Windows или «ifconfig» в Linux. Рассмотрите возможность использования os.popen () с некоторыми регулярными выражениями.
Вы хотели бы проанализировать вывод 'arp', но кеш ARP ядра будет содержать только эти IP-адреса, если эти хосты установили связь с хостом, на котором выполняется скрипт Python.
ifconfig можно использовать для отображения MAC-адресов локальных интерфейсов, но не в локальной сети.
Марк Пилигрим описывает, как это сделать в Windows для текущей машины с модулем Netbios здесь. Вы можете получить модуль Netbios как часть пакета Win32, доступного на python.org. К сожалению, на данный момент я не могу найти документацию по модулю.
поскольку python не предназначен для решения проблем, связанных с ОС (он должен интерпретироваться и кросс-платформенный), я бы выполнил внешнюю команду для этого:
в unix команда ifconfig
если вы выполните его как канал, вы получите желаемый результат:
import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
У Python есть модули, специфичные для ОС, поэтому я думаю, что ваш ответ вводит в заблуждение. Питонический способ справиться с этим - это модуль с независимым от ОС интерфейсом, который может быть подклассифицирован плагинами, специфичными для ОС.