ioProgrammo Community

Linguaggi di programmazione => Java => Discussione aperta da: Nuklear - Luglio 26, 2017, 09:57:38



Titolo: Non lista tutti gli IP della LAN
Inserito da: Nuklear - 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?


Titolo: Re: Non lista tutti gli IP della LAN
Inserito da: Nuklear - Luglio 27, 2017, 03:16:11
Nessuna idea?


Titolo: Re: Non lista tutti gli IP della LAN
Inserito da: michele.p - 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...


Titolo: Re: Non lista tutti gli IP della LAN
Inserito da: simonebogni - 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 (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 (https://stackoverflow.com/questions/9555549/java-inetaddress-isreachable-timeout)


powered by Simple Machines 1
powered by Simple Machines