it-swarm.com.de

So erhalten Sie eine Liste von IP-Adressen, die in demselben Netzwerk (Subnetz) mit Java verbunden sind

Wie erhalte ich eine Liste von IP-Adressen für Geräte, die mit Java über dasselbe Subnetz verbunden sind?

38
Jigar Joshi

dies sollte funktionieren, wenn die Hosts in Ihrem Netzwerk auf ICMP-Pakete reagieren (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");
       }
   }
}

rufen Sie die Methode für ein Subnetz (192.168.0.1-254) wie folgt auf: 

checkHosts("192.168.0");

habe es nicht getestet, sollte aber irgendwie funktionieren. Offensichtlich werden nur die 254 Hosts im letzten Byte der IP-Adresse geprüft ...

prüfen:

http://download-llnw.Oracle.com/javase/6/docs/api/Java/net/InetAddress.html#isReachable%28int%29http: //blog.taragana. de/index.php/archive/how-to-do-icmp-ping-in-Java-jdk-15-und-darüber/

hoffe das hat geholfen

46
fasseg

Rufen Sie eine Liste von IP-Adressen ab, die auf Pings antworten

Ich habe diesen Code für Windows 7 64 Bit mit Java jdk1.8.0_25 erstellt.

Schritt 1: Laden Sie nmap für Windows herunter:

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

Schritt 2: Stellen Sie sicher, dass Sie diese Ergebnisse über die Befehlszeile oder die Powershell erhalten:

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>

Schritt 3: Erstellen Sie ein Java-Programm und fügen Sie diese Methode hinzu:

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;
}

Schritt 4, Ausgabe auswerten

Drucken Sie den Inhalt der zurückgegebenen aus. Es ist eine Liste von IP-Adressen nach IP-Adressen, beginnend mit 13.150.23.1 bis 13.150.23.255

Wie schnell geht es?

Es hat ungefähr 4 Sekunden gedauert, die 255 Adressen zu scannen. 

6
Eric Leschinski

Um die in einem LAN verbundenen Hosts aufzulisten, müssen Sie alle verfügbaren IP-Adressen im Subnetz per Ping ansprechen. Eine Ping-Nachricht kann jedoch durch eine Firewall eingeschränkt werden, sodass auf jeder IP-Adresse im IP-Adressbereich des LANs ein Socket geöffnet werden kann. 

5
Suhas Phartale

Zeigt aktive Adressen im LAN an

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);
    }
}

Ausgabe

127.0.0.1
0:0:0:0:0:0:0:1
172.128.1.102

Wenn Sie eine Liste aller mit dem Netzwerk verbundenen Hosts meinen, ist die einzige Möglichkeit, die garantiert funktioniert, darin zu bestehen, eine Liste von IP-Adressen durchzugehen und alle zu pingen.

Wenn Sie jedoch nach etwas Bestimmtem suchen, können Sie nachschlagen (z. B. RMI-Registrierung (LocateRegistry.getRegistry(Host, port).list())).

Wenn Sie nur alle IP-Adressen eines bestimmten Hosts haben möchten, schauen Sie sich NetworkInterface.getNetworkInterfaces() an.

1
Scott

In Java.net.InetAddress gibt es seit Java 1.5 eine ping-ähnliche Methode: Public boolean isReachable (int timeout). Sie können das verwenden, um alle IP-Adressen in Ihrem Subnetz zu durchlaufen ... Java-doc

1
vicatcu

Keines davon funktionierte für mich, da ich den Server erstellt hatte und auf diese Pings nicht reagierte. Also erstellte ich einen Mechanismus, der den Server dazu veranlasst, auf einen Ping zu antworten, und verwendete die Methode der rohen Kraftprüfung für alle Adressen im Subnetz. 

PS: Schreiben Sie dies, weil jemand, der seinen eigenen Server erstellt, dies möglicherweise benötigt.

0
Sumukha Pk