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

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

8
задан 2 revs, 2 users 100% 8 October 2008 в 03:22
поделиться

8 ответов

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

11
ответ дан 5 December 2019 в 13:03
поделиться

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

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

Для получения его от локальной машины, Вы могли проанализировать ifconfig (Unix) или ipconfig (окна) с небольшой трудностью.

1
ответ дан 5 December 2019 в 13:03
поделиться

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

1
ответ дан 5 December 2019 в 13:03
поделиться

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

1
ответ дан 5 December 2019 в 13:03
поделиться

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

0
ответ дан 5 December 2019 в 13:03
поделиться

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

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

0
ответ дан 5 December 2019 в 13:03
поделиться

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

0
ответ дан 5 December 2019 в 13:03
поделиться

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

в Unix команда ifconfig

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

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
-1
ответ дан 5 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: