2012-07-21 15 views
5

Qualcuno sa perché InetAddress.getLocalHost() restituisce sempre 127.0.0.1 sebbene io abbia cambiato l'IP in/etc/hosts? Dopo il cambioInetAddress.getLocalHost() restituisce sempre 127.0.0.1

hostname -i 

restituisce il IP corretto (192.168.x.x), ma InetAddress.getLocalHost() è ancora il nome.

Sto usando jdk 1.6.0_31 a proposito, su CentOS 6.2. Grazie!

+0

Hai riavviato il servizio di rete? – Jeshurun

+0

Grazie per la risposta @Jeshurun. Ho riavviato il server. – Jingwei

risposta

1

perché si deve riavviare il pc o Cancella cache DNS "applicare" i cambiamenti

+0

Grazie per la risposta.Ho riavviato il server e cancellato la cache con questo comando: servizio nscd restart. Ma è sempre lo stesso. – Jingwei

1

Questo potrebbe essere un problema di restrizione di sicurezza. Dal javadoc:

Se c'è un responsabile della sicurezza, il suo metodo checkConnect viene chiamato con il nome host locale e -1 come i suoi argomenti per vedere se l'operazione è consentita . Se l'operazione non è consentita, viene restituito un indirizzo Inet che rappresenta l'indirizzo di loopback.

+1

Grazie per la risposta. Hai idea di come sono in grado di controllare le restrizioni di sicurezza? – Jingwei

+1

@Jingwei: [Questo] (http://docs.oracle.com/javase/tutorial/essential/environment/security.html) link su security manager potrebbe aiutarti. – Keppil

+0

Grazie a @Keppil. Sto eseguendo il test rmi nella riga di comando per ridurre al minimo l'influenza di eventuali contenitori. Secondo il link 'In genere, un'applet web viene eseguita con un gestore della sicurezza fornito dal browser o dal plug-in Java Web Start. Altri tipi di applicazioni normalmente funzionano senza un security manager, a meno che l'applicazione stessa non ne definisca uno. Non dovrei usare nessun Security Manager. Per confermare questo, ho controllato il valore di 'System.getSecurityManager()', che restituisce null. Pertanto, non lo metto a causa del SecurityManager. – Jingwei

0
  1. Prima di tutto LocalHost sarà rappresenta sempre l'indirizzo di loopback 127.0.0.1 (che viene utilizzato per eseguire il debug lo stack TCP/IP.) Quando il manager di sicurezza fonda che l'operazione non è consentita.

  2. Per il vostro indirizzo LAN usano InetAddress.getByName("PC NAME").getHostAddress()

    Si prega di sostituire il nome del PC con il nome del PC.

Esempio:

public class StrTest { 


    public static void main(String[] args) throws IOException { 


      System.out.println(InetAddress.getByName("Vicky-PC").getHostAddress()); 

    } 

} 
+0

Grazie per la risposta. Il problema è che fa parte dell'implementazione RMI di java che non posso modificare. – Jingwei

1

una vecchia questione, ma forse questa informazione sarà utile a qualcun altro - ho faticato a trovare le informazioni documentate da nessuna parte (forse perché non è un parte formale delle specifiche linguistiche), e ha dovuto determinare attraverso la sperimentazione.

Se il problema non riguarda il SecurityManager, il problema più probabile è che la risoluzione del nome a livello di sistema operativo è in qualche modo rovinata.

Almeno su tutte le piattaforme Unix che ho provato su (OS X, Solaris, Linux), il processo utilizzato da Java è:

  1. Determinare nome host locale
  2. Resolve che tramite/etc/host per determinare l'indirizzo IP

ho visto questo rotto da mal configurati/etc/hosts, come ad esempio:

127.0.0.1 localhost myhost 
1.2.3.4 myhost 

per dare esattamente i sintomi sopra descritti.

Problemi correlati