java - trovare - vedere indirizzi ip collegati alla rete mac




Come ottenere un elenco di IP connessi nella stessa rete(subnet) utilizzando Java (5)

Come posso ottenere l'elenco degli indirizzi IP per i dispositivi connessi alla mia stessa subnet utilizzando Java?


Ottieni un elenco di indirizzi IP che rispondono ai ping

Ho creato questo codice per Windows 7 a 64 bit utilizzando Java jdk1.8.0_25.

Passaggio 1: scarica nmap per windows:

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

Passaggio 2: assicurati di poter ottenere questi risultati sulla riga di comando o in 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>

Passaggio 3: crea un programma java e includi questo metodo:

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

Passaggio 4, valutare l'output

Stampa il contenuto del reso. È un elenco di indirizzi IP dagli indirizzi IP che iniziano con 13.150.23.1 fino a 13.150.23.255

Quanto velocemente va?

Ci sono voluti circa 4 secondi per scansionare i 255 indirizzi.


Da Java 1.5 esiste un metodo simile al ping in java.net.InetAddress: public boolean isReachable (int timeout). Si può usare per iterare su tutti gli indirizzi IP nella sottorete ... java-doc


Per elencare gli host connessi in una LAN è necessario eseguire il ping di tutti gli indirizzi IP disponibili nella subnet. Ma un messaggio ping potrebbe essere limitato dal firewall in modo tale che un modo più sicuro potrebbe essere aprire un socket per ciascun indirizzo IP nell'intervallo di indirizzi IP della LAN.


Se si intende un elenco di tutti gli host collegati alla rete, penso che l'unico modo in cui è garantito il funzionamento è quello di scorrere un elenco di indirizzi IP e ping tutti loro.

Detto questo, se stai cercando qualcosa di più specifico, potrebbe esserci qualcosa che puoi cercare (es. Registro di RMI ( LocateRegistry.getRegistry(host, port).list() ).

Inoltre, se desideri solo tutti gli indirizzi IP di un determinato host, dai un'occhiata a NetworkInterface.getNetworkInterfaces() .


questo dovrebbe funzionare quando gli host della rete reagiscono ai pacchetti 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");
       }
   }
}

invocare il metodo per una sottorete (192.168.0.1-254) in questo modo:

checkHosts("192.168.0");

non l'ho provato ma dovrebbe funzionare un pò come questo. Ovviamente questo controlla solo i 254 host nell'ultimo byte dell'indirizzo ip ...

dai un'occhiata:

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/

spero che abbia aiutato







networking