Jak uzyskać listę adresów IP podłączonych do tej samej sieci (podsieci) przy użyciu Java

Jak uzyskać listę adresów IP urządzeń podłączonych do tej samej podsieci za pomocą Javy?

Author: Celeo, 2010-07-27

7 answers

Powinno to działać, gdy hosty w Twojej sieci reagują na pakiety 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");
       }
   }
}

Wywołaj metodę dla podsieci (192.168.0.1-254) w następujący sposób:

checkHosts("192.168.0");
Nie testowałem tego, ale powinno działać tak. Oczywiście sprawdza tylko 254 hosty w ostatnim bajcie ip adres...

Sprawdzić:

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/

Hope that helped

 45
Author: fasseg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-06 19:42:06

Pobierz listę adresów IP, które odpowiadają na pingi

Zrobiłem ten kod Dla Windows 7 64 bit używając Java jdk1.8. 0_25.

Krok 1: Pobierz nmap Dla windows:

Http://nmap.org/book/inst-windows.html

Krok 2: Upewnij się, że możesz uzyskać te wyniki w wierszu poleceń lub powershell:

C:\Users\eric.leschinski>Nmap -sn -oG ip.txt 13.10.23.1-255
Starting Nmap 6.47 ( http://nmap.org ) at 2014-11-13 15:47 Eastern Standard Time
Nmap scan report for 13.10.23.1
Host is up (0.00s latency).
Nmap scan report for 13.10.23.11
Nmap done: 255 IP addresses (2 hosts up) scanned in 5.53 seconds
C:\Users\eric.leschinski>

Krok 3: Utwórz program java i dołącz tę metodę:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public ArrayList<String> getIPAddressList(){
    ArrayList<String> addresses = new ArrayList<String>();
    try {
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec("nmap -sn -oG ip.txt 13.150.23.1-255");
        BufferedReader input = new BufferedReader(
            new InputStreamReader(pr.getInputStream()));
        String line = null;
        while((line=input.readLine()) != null) {
            System.out.println(line);
            if (line.contains("Nmap scan report for")){
                String[] elements = line.split(" ");
                int end = elements.length-1;
                String ip_address = elements[end];
                String line2 = input.readLine();
                if (line2.contains("Host is up")){
                    addresses.add(ip_address);
                }
            }
        }

        int exitVal = pr.waitFor();
        System.out.println("Exited with error code "+exitVal);
    }
    catch(Exception e){
        e.printStackTrace();
        System.exit(0);
    }
    return addresses;
}

Krok 4, Oceń wyjście

Wydrukuj zawartość zwróconego. Jest to lista adresów IP według adresów ip począwszy od 13.150.23.1 do 13.150.23.255

Jak szybko jedzie?

Skanowanie 255 adresów zajęło około 4 sekund.
 6
Author: Eric Leschinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 21:09:15

Aby wyświetlić listę hostów podłączonych do SIECI LAN, musisz pingować wszystkie dostępne adresy IP w podsieci. Ale wiadomość ping może być ograniczona przez firewall, więc bezpieczniejszym sposobem może być otwarcie gniazda do każdego adresu IP w zakresie adresów IP sieci LAN.

 5
Author: Suhas Phartale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-27 16:57:44

Pokazuje aktywne adresy w sieci LAN

public static void main(String[] args) {
    try {
        Enumeration nis = NetworkInterface.getNetworkInterfaces();
        while(nis.hasMoreElements())
        {
            NetworkInterface ni = (NetworkInterface) nis.nextElement();
            Enumeration ias = ni.getInetAddresses();
            while (ias.hasMoreElements())
            {
                InetAddress ia = (InetAddress) ias.nextElement();
                System.out.println(ia.getHostAddress());
            }

        }
    } catch (SocketException ex) {
        Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Wyjście

127.0.0.1
0:0:0:0:0:0:0:1
172.128.1.102
 3
Author: Thusitha Wickramasinghe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-06 06:29:13

Jeśli masz na myśli listę wszystkich hostów podłączonych do sieci, myślę, że jedynym gwarantowanym sposobem działania jest przejście przez listę adresów IP i pingowanie ich wszystkich.

To powiedziawszy, jeśli szukasz czegoś bardziej konkretnego, może być coś, co możesz sprawdzić (np. rejestr RMI (LocateRegistry.getRegistry(host, port).list()).

Również, jeśli chcesz mieć wszystkie adresy IP, które ma dany host, spójrz na NetworkInterface.getNetworkInterfaces().

 1
Author: Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-27 17:01:02

Od Javy 1.5 istnieje metoda podobna do ping w java. net. InetAddress: public boolean isReachable (int timeout). Możesz tego użyć do iteracji wszystkich adresów IP w podsieci... java-doc

 1
Author: vicatcu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-27 17:01:49

Jednym z problemów jest to, że żadne z pojęć " LAN " i "connected" nie ma znaczenia w TCP/IP. Sugerowana technika wywołania isreachable() na wszystkich hostach w podsieci Klasy D może działać, jeśli Twoja sieć LAN odpowiada dokładnie podsieci klasy D.

Może lepiej spojrzeć na sambę, która może przesłuchiwać członków LAN przez SMB, więc przynajmniej będziesz używał techniki, która ma takie samo znaczenie dla LAN, jak ty.

 -1
Author: user207421,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-28 03:17:29