n° 219
Novembre 2017
Dicembre 12, 2017, 08:42:37 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Non lista tutti gli IP della LAN  (Letto 832 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
Nuklear
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 5


Mostra profilo E-mail
« inserita:: Luglio 26, 2017, 09:57:38 »

La mia LAN è composta da:

stampante: 192.168.1.100
pc-mac: 192.168.1.101
pc-win: 192.168.1.102
router: 192.168.1.254

Questa procedura che mi dovrebbe listare tutti gli ip sopra indicati in una jlist:
Codice:

public void listIP(){
        try
              {
            
            InetAddress address;  
            DefaultListModel iplan = new DefaultListModel();
            jList1.setModel(iplan);
            InetAddress localhost = InetAddress.getLocalHost();
            iplan.addElement(localhost.getHostAddress());
            String ip;
            ip = localhost.getHostAddress();
            
            for (int i = 0; i < 256; i++)
            {
                try
                {
                String currIP;
                currIP = ip.substring(0,ip.length()-3)+String.valueOf(i);
                address = InetAddress.getByName(currIP);
                if (address.isReachable(5))
                {
                    iplan.addElement(address.getHostAddress());
                }
                }
                catch (IOException e) {
                     msgbox(ex.getMessage());
                }
                
                
            }
            msgbox("Fine ricerca!");
        }
        catch (UnknownHostException ex) {
            msgbox(ex.getMessage());
        }
mi produce in output solo:
Codice:
192.168.1.100
192.168.1.101
quando invece gli altri due IP sono pingabili:
Codice:
ping -t 3 192.168.1.102
PING 192.168.1.102 (192.168.1.102): 56 data bytes
64 bytes from 192.168.1.102: icmp_seq=0 ttl=128 time=2.936 ms
64 bytes from 192.168.1.102: icmp_seq=1 ttl=128 time=11.346 ms
64 bytes from 192.168.1.102: icmp_seq=2 ttl=128 time=2.913 ms


--- 192.168.1.102 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.913/5.732/11.346/3.970 ms
e
Codice:
ping -t 3 192.168.1.254
PING 192.168.1.254 (192.168.1.254): 56 data bytes
64 bytes from 192.168.1.254: icmp_seq=0 ttl=254 time=2.094 ms
64 bytes from 192.168.1.254: icmp_seq=1 ttl=254 time=2.316 ms
64 bytes from 192.168.1.254: icmp_seq=2 ttl=254 time=2.228 ms

--- 192.168.1.254 ping statistics ---
4 packets transmitted, 3 packets received, 25.0% packet loss
round-trip min/avg/max/stddev = 2.094/2.213/2.316/0.091 ms

Come mai?
In cosa sbaglio?
Registrato
Nuklear
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 5


Mostra profilo E-mail
« Risposta #1 inserita:: Luglio 27, 2017, 03:16:11 »

Nessuna idea?
Registrato
michele.p
Administrator
Full Member
*****

Karma: +9/-2
Scollegato Scollegato

Messaggi: 586


Mostra profilo
« Risposta #2 inserita:: Luglio 27, 2017, 04:18:44 »

Non conosco Java ma, con una sorta di "parallelismo" con Python, inizierei con il fare qualche modifica. Gli indirizzi 0 e 255 non è necessario che tu li vada a controllare poiché uno è l'indirizzo di rete e l'altro è di broadcasting.

In sostanza la riga:
Codice:
for (int i = 0; i < 256; i++)
la modificherei in:
Codice:
for (int i = 1; i < 255; i++)

Nella riga:
Codice:
if (address.isReachable(5))
il 5 cosa indica un timeout?

P.S.: Prova a dare un'occhiata qui, alla soluzione indicata (naturalmente da adattare al tuo caso):

https://stackoverflow.com/questions/3345857/how-to-get-a-list-of-ip-connected-in-same-network-subnet-using-java

Fai sapere...
Registrato
simonebogni
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 14


Mostra profilo
« Risposta #3 inserita:: Agosto 02, 2017, 05:26:35 »

Ciao,
io su stackoverflow ho trovato questo: https://stackoverflow.com/questions/3345857/how-to-get-a-list-of-ip-connected-in-same-network-subnet-using-java

Nell'esempio usano 1000 come valore di timeout, potrebbe essere che 5 ms sia in effetti un valore troppo basso.

Ti aggiungo un link ad un'altra risposta su S.O. dove si parla del confronto fra il tempo del ping e quello del address.isReachable(): https://stackoverflow.com/questions/9555549/java-inetaddress-isreachable-timeout
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines