web-dev-qa-db-fra.com

Comment obtenir une liste d'adresses IP connectées dans le même réseau (sous-réseau) en utilisant Java

Comment obtenir la liste des adresses IP des périphériques connectés à mon même sous-réseau à l'aide de Java?

38
Jigar Joshi

cela devrait fonctionner lorsque les hôtes de votre réseau réagissent aux paquets 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");
       }
   }
}

invoquer la méthode pour un sous-réseau (192.168.0.1-254) comme ceci: 

checkHosts("192.168.0");

je ne l'ai pas testé mais cela devrait fonctionner un peu. Évidemment, cela ne vérifie que les 254 hôtes dans le dernier octet de l'adresse IP ...

vérifier:

http://download-llnw.Oracle.com/javase/6/docs/api/Java/net/InetAddress.html#isReachable%28int%29http: //blog.taragana. com/index.php/archive/comment-faire-icmp-ping-in-Java-jdk-15-and-above/

espérons que cela a aidé

46
fasseg

Obtenir une liste des adresses IP qui répondent aux pings

J'ai créé ce code pour Windows 7 64 bits en utilisant Java jdk1.8.0_25.

Étape 1: téléchargez nmap pour Windows:

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

Étape 2: assurez-vous d’obtenir ces résultats sur la ligne de commande ou sur 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>

Étape 3: Créez un programme Java et incluez cette méthode:

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

Étape 4, évaluez le résultat

Imprimez le contenu du retour. C'est une liste d'adresses IP par adresses IP commençant par 13.150.23.1 à 13.150.23.255

À quelle vitesse va-t-il?

Il a fallu environ 4 secondes pour scanner les 255 adresses. 

6
Eric Leschinski

Pour répertorier les hôtes connectés à un réseau local, vous devez envoyer une requête ping à toutes les adresses IP disponibles sur le sous-réseau. Mais un message ping pourrait être restreint par le pare-feu, donc un moyen plus sûr d'ouvrir un socket à chaque adresse IP de la plage d'adresses IP du réseau local. 

5
Suhas Phartale

Affiche les adresses actives sur le réseau local

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

Sortie

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

Si vous voulez dire une liste de tous les hôtes connectés au réseau, je pense que la seule façon de fonctionner est de parcourir une liste d'adresses IP et de leur envoyer une requête ping à toutes.

Cela dit, si vous recherchez quelque chose de plus spécifique, vous pouvez rechercher quelque chose (par exemple, le registre de RMI (LocateRegistry.getRegistry(Host, port).list()).

De plus, si vous voulez seulement toutes les adresses IP d’un hôte donné, consultez NetworkInterface.getNetworkInterfaces().

1
Scott

Depuis Java 1.5, il existe une méthode de type ping dans Java.net.InetAddress: Public boolean isReachable (int timeout). Vous pouvez l'utiliser pour parcourir toutes les adresses IP de votre sous-réseau ... Java-doc

1
vicatcu

Aucun de ceux-ci ne fonctionnait pour moi car j'avais créé le serveur et celui-ci ne répondait pas à ces pings. J'ai donc créé un mécanisme permettant au serveur de répondre à un ping et utilisé la méthode de vérification brutale pour toutes les adresses du sous-réseau. 

PS: écrire ceci parce que quelqu'un qui crée son propre serveur pourrait en avoir besoin.

0
Sumukha Pk