Поиск хоста с MAC-адресом с помощью Python

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

Эта статья, "Send hand-crafted Ethernet Frames in Python (ARP for example)", seems to be exactly what you are looking for.
alif 18.09.2008 07:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
9
1
15 774
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

У меня вопрос: как вы получаете IP-информацию из своей сети?

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

Ответ принят как подходящий

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

Зависит от вашей платформы. Если вы используете * 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 есть модули, специфичные для ОС, поэтому я думаю, что ваш ответ вводит в заблуждение. Питонический способ справиться с этим - это модуль с независимым от ОС интерфейсом, который может быть подклассифицирован плагинами, специфичными для ОС.

Walter 19.07.2010 05:43

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