Список адресов/имен хостов IP от локальной сети в 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));
}

37
задан Peter Mortensen 23 April 2010 в 23:35
поделиться

5 ответов

Если "локальным" Вы имеете в виду на том же сегменте сети, то необходимо выполнить следующие шаги:

  1. Решают, что Ваш собственный IP-адрес
  2. Решает, что Ваша собственная сетевая маска
  3. Определяет сетевой диапазон
  4. Сканирование все адреса (кроме самого низкого, которое является Вашим сетевым адресом и самым высоким, которое является Вашим широковещательным адресом).
  5. Использование обратный поиск Вашего DNS для определения имени узла для IP-адресов, которые отвечают сканирование.

Или можно просто позволить Python выполнить nmap внешне и передать результаты по каналу назад в программу.

19
ответ дан Steve Moyer 27 November 2019 в 04:49
поделиться

Обновление : сценарий теперь расположен на github.

я записал маленький сценарий Python, который усиливает scapy arping().

21
ответ дан Benedikt Waldvogel 27 November 2019 в 04:49
поделиться

Если Вы знаете названия своих компьютеров, можно использовать:

import socket
IP1 = socket.gethostbyname(socket.gethostname()) # local IP adress of your computer
IP2 = socket.gethostbyname('name_of_your_computer') # IP adress of remote computer

Иначе необходимо будет просканировать для всех IP-адресов, которые следуют за той же маской как локальный компьютер (IP1), как указано в другом ответе.

10
ответ дан Peter Mortensen 27 November 2019 в 04:49
поделиться

Один из ответов в этот вопрос мог бы помочь Вам. Кажется, существует версия агностика платформы для Python, но я еще не попробовал его.

-1
ответ дан Community 27 November 2019 в 04:49
поделиться

Я нашел этот сетевой сканер в статье Python и записал этот короткий код. Это делает то, что Вы хотите! Действительно однако необходимо знать доступные порты для устройств. Порт 22 является ssh стандартом и что я использую. Я предполагаю, что Вы могли циклично выполниться по всем портам. Некоторые значения по умолчанию:

linux: [20, 21, 22, 23, 25, 80, 111, 443, 445, 631, 993, 995]
windows: [135, 137, 138, 139, 445]
mac: [22, 445, 548, 631]
import socket

def connect(hostname, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.setdefaulttimeout(1)
    result = sock.connect_ex((hostname, port))
    sock.close()
    return result == 0

for i in range(0,255):
    res = connect("192.168.1."+str(i), 22)
    if res:
        print("Device found at: ", "192.168.1."+str(i) + ":"+str(22))
0
ответ дан 27 November 2019 в 04:49
поделиться
Другие вопросы по тегам:

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