Как получить список IP, соединенного в той же сети (подсеть) с помощью Java

Как я получаю список IP-адресов для устройств, подключенных к моей той же подсети с помощью Java?

40
задан Celeo 5 January 2016 в 21:39
поделиться

5 ответов

это должно работать, когда узлы в вашей сети реагируют на пакеты ICMP (ping) (> JDK 5):

public void checkHosts(String subnet){
   int timeout=1000;
   for (int i=1;i<255;i++){
       String host=subnet + "." + i;
       if (InetAddress.getByName(host).isReachable(timeout)){
           System.out.println(host + " is reachable");
       }
   }
}

вызывают метод для подсети (192.168.0.1-254) следующим образом :

checkHosts("192.168.0");

не тестировал, но должно работать примерно так. Очевидно, это проверяет только 254 хоста в последнем байте IP-адреса ...

check:

http://download-llnw.oracle.com/javase/6/docs/api/java/net/ InetAddress.html # isReachable% 28int% 29 http://blog.taragana.com/index.php/archive/how-to-do-icmp-ping-in-java-jdk-15-and-above/

надеюсь, что это помогло

47
ответ дан 27 November 2019 в 01:48
поделиться

Чтобы вывести список хостов, подключенных к локальной сети, вам нужно будет пропинговать все доступные IP-адреса в подсети. Но сообщение ping может быть ограничено брандмауэром, поэтому более безопасным способом может быть открытие сокета для каждого IP-адреса в диапазоне IP-адресов LAN.

5
ответ дан 27 November 2019 в 01:48
поделиться

Начиная с Java 1.5, в java.net.InetAddress есть метод, похожий на ping: публичное логическое значение isReachable (интервал тайм-аута). Вы можете использовать это для перебора всех IP-адресов в вашей подсети ... java-doc

2
ответ дан 27 November 2019 в 01:48
поделиться

Если вы имеете в виду список всех хостов, подключенных к сети, я думаю, что единственный гарантированно работающий способ - это просмотреть список IP-адресов и пропинговать их все.

Тем не менее, если вы ищете что-то более конкретное, вы можете кое-что найти (например, реестр RMI ( LocateRegistry.getRegistry (host, port) .list () ).

Кроме того, если вам просто нужны все IP-адреса данного хоста, посмотрите NetworkInterface.getNetworkInterfaces () .

1
ответ дан 27 November 2019 в 01:48
поделиться

Одна из проблем заключается в том, что ни один из терминов «LAN» и «подключенный» не имеет значения в TCP / IP. Предлагаемый метод вызова isReachable () на всех хостах в подсети класса D может работать, если ваша локальная сеть точно соответствует подсети класса D.

Возможно, вам лучше взглянуть на SAMBA, который может опрашивать участников LAN через SMB, так что, по крайней мере, вы будете использовать метод, который имеет такое же значение для LAN, что и вы.

-2
ответ дан 27 November 2019 в 01:48
поделиться
Другие вопросы по тегам:

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