Поиск хоста с MAC-адресом с использованием Python - PullRequest
8 голосов
/ 17 сентября 2008

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

Ответы [ 9 ]

11 голосов
/ 17 сентября 2008

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

2 голосов
/ 18 сентября 2008

Эта статья «Отправка Ethernet-фреймов вручную в Python (например, ARP)», кажется, именно то, что вы ищете.

1 голос
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

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

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

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

0 голосов
/ 17 сентября 2008

, поскольку python не предназначался для решения проблем, связанных с ОС (он должен быть интерпретирован и кросс-платформенный), я бы выполнил внешнюю команду для этого:

в Unix: ifconfig

если вы выполните его как трубу, вы получите желаемый результат:

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
0 голосов
/ 17 сентября 2008

Марк Пилигрим описывает, как сделать это в Windows для текущей машины с модулем Netbios здесь . Вы можете получить модуль Netbios как часть пакета Win32, доступного на python.org. К сожалению, на данный момент я не могу найти документы по модулю.

0 голосов
/ 17 сентября 2008

Возможно, вы захотите проанализировать вывод 'arp', но ARP-кеш ядра будет содержать эти IP-адреса только если эти хосты связывались с хостом, на котором выполняется скрипт Python.

ifconfig может использоваться для отображения MAC-адресов локальных интерфейсов, но не тех, что в локальной сети.

0 голосов
/ 17 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...