Вопрос

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

Это было полезно?

Решение

Вам нужно ARP.Стандартная библиотека Python не содержит никакого кода для этого, поэтому вам либо нужно вызвать внешнюю программу (в вашей ОС может быть утилита arp), либо вам нужно создать пакеты самостоятельно (возможно, с помощью такого инструмента, как Скапи.

Другие советы

Эта статья, "Отправлять созданные вручную фреймы Ethernet на Python (например, ARP)", похоже, это именно то, что вы ищете.

Я не думаю, что существует встроенный способ получить это из самого Python.

Мой вопрос в том, как вы получаете информацию об IP-адресе из своей сети?

Чтобы получить его со своего локального компьютера, вы могли бы без особых трудностей выполнить синтаксический анализ ifconfig (unix) или ipconfig (Windows).

Если вам нужно чистое решение на Python, вы можете взглянуть на Скапи для обработки пакетов (вам нужно отправить ARP-запрос и проверить ответы).Или, если вы не возражаете против вызова внешней программы, вы можете использовать arping (в системах Un * x я не знаю эквивалента Windows).

Похоже, что не существует родного способа сделать это с помощью Python.Лучше всего было бы проанализировать выходные данные "ipconfig / all" в Windows или "ifconfig" в Linux.Рассмотрите возможность использования os.popen() с некоторыми регулярными выражениями.

Зависит от вашей платформы.Если вы используете *nix, вы можете использовать команду 'arp' для поиска mac-адреса для данного IP-адреса (предполагается, что IPv4).Если это не сработает, вы могли бы пропинговать адрес и затем посмотреть, или, если у вас есть доступ к необработанной сети (используя BPF или какой-либо другой механизм), вы могли бы отправлять свои собственные ARP-пакеты (но это, вероятно, излишне).

Вы хотели бы проанализировать выходные данные '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())
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top