Newsgroup: it.comp.java
Titolo: Ricavare indirizzo IP locale

Ho scritto le seguenti, semplici, righe di codice per recuperare gli 
indirizzi IP associati ad una macchina.
Ho compilato con JDK1.5 sotto XP ed ho testato il programma sotto XP e sotto 
Linux:
- sotto XP ottengo 192.168.0.170
- sotto Linux 127.0.0.1
Entrambe le macchine hanno un IP dinamico assegnato via DHCP e la macchina 
Linux ha il suo 192.168.0.X.
Dove sbaglio? Perchè non mi da l'IP sotto Linux?
InetAddress[] pool;
try{
    pool =
InetAddress.getAllByName(InetAddress.getLocalHost().getHostName());
    System.out.println("Recuperati " + pool.length + " indirizzi");
    for(int i=0; i<pool.length; i++){
        String addr = pool[i].getHostAddress();
        byte[] addrArray = pool[i].getAddress();
        System.out.println(addr);
    }
}
catch(UnknownHostException e){
    System.err.println(e.getMessage());
}
Ciao
Marco 

> - sotto Linux 127.0.0.1
 
Come vedi sotto linux viene interrogata l'intefaccia di loopback eth0: prova
a interrogare quella giusta (dovrebbe esser eth1 la prima scheda di rete
reale) per avere l'ip che ti serve
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 reale) per avere l'ip che ti serve
Allora, l'interfaccia "eth0" è quella giusta a 192.168.0.X.
Quella "lo" è a 127.0.0.1.
Ma come faccio ad interrogare l'interfaccia che pare a me?
Java non dovrebbe essere write-once-run-everywhere? :-)
Il programma deve girare sotto win e sotto linux.
Ciao
Marco 


http://csvtosql.sf.net


Scusami, piccola (?) confusione....
Cmq il metodo che hai scritto tu dovrebbe stamparti tutti gli indirizzi
associati a quell'interfaccia, ma a quanto hai detto ti stampa solo il lo...
se ben ricordo viene stampato l'indirizzo del loopback quando il parametro
host ( di getAllByName(String host)) e' null...
Spero di esserti stato utile...


 host ( di getAllByName(String host)) e' null...
In effetti se è null da 127.0.0.1 anche sotto windows.
Ma ho provato a stampare il valore di 
InetAddress.getLocalHost().getHostName() è non è null, ma è quello giusto 
della macchina. :-(
Ciao
Marco 

 Dove sbaglio? Perchè non mi da l'IP sotto Linux?
"If the address is dynamic (DHCP or dial-up for example) and isn't
registered (dynamically) in the name service then an alternative
approach is to use java.net.NetworkInterface to enumerate all the
local addresses. With the list of addresses the application can
choose an appropriate local address -- ie: ignore any addreses
that are loopback addresses (use InetAddress's isLoopbackAddress
method), and additional use the java.net.preferIPv6Addresses
system property so that an IPv4 or IPv6 local address is chosen
as appropriate."
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4665037
--
Marco

 InetAddress.getAllByName(InetAddress.getLocalHost().getHostName());
Ma se provi InetAddress.getLocalHost().getHostAddress() cosa ti ritorna?
Saluti
CarMas

> Ma se provi InetAddress.getLocalHost().getHostAddress() cosa ti ritorna?
127.0.0.1
Ciao
Marco 

 as appropriate."
MITICOOOOOOOOOOOOOO!!!
Problema risolto!!
GRAZIE MILLE!!!
Certo il codice si è complicato un pochetto però.
Praticamente si scandiscono tutte le interfacce di rete, e per ciascuna si 
ottengo gli indirizzi IP.
Enumeration interfaces;
NetworkInterface current_interface;
try{
    interfaces = NetworkInterface.getNetworkInterfaces();
    while(interfaces.hasMoreElements()){
        Enumeration pool;
        InetAddress address;
        current_interface = (NetworkInterface)interfaces.nextElement();
        pool = current_interface.getInetAddresses();
        System.out.println(current_interface.getDisplayName());
        while(pool.hasMoreElements()){
            address = (InetAddress)pool.nextElement();
            System.out.println(address.getHostAddress());
        }
    }
}
catch(Exception e){
    System.err.println(e.getMessage());
}
Ciao
Marco