2012-04-16 15 views
7

Io uso l'opzione -Djava.rmi.server.hostname = localhost per fare in modo che rmi ascolti solo su localhost, ma netstat mostra che la presa è in ascolto su 0.0.0.0.java rmi -Djava.rmi.server.hostname = localhost apre ancora un socket in ascolto su 0.0.0.0

La cosa strana è che il thread RMI RenewClean mostra il suo utilizzo di localhost. Per esempio. RMI RenewClean- [localhost: 59357]

ho pensato che se ho impostato -Djava.rmi.server.hostname = localhost si dovrebbe essere in ascolto solo su 127.0.0.1

Perchè sono incomprensioni che cosa java.rmi .server.hostname controlla?

+0

0.0.0.0 è anche loopback. Forse si confonde perché sono più o meno gli stessi. (Non so quale sia la differenza) Hai provato '-Djava.rmi.server.hostname = 127.0.0.1' –

+1

@PeterLawrey No. Niente a che fare con questo. Vedi la mia risposta. – EJP

risposta

17

ho pensato che se ho impostato -Djava.rmi.server.hostname = localhost dovrebbe essere in ascolto solo su 127.0.0.1

No.

Perchè sono fraintendendo quello che controlli java.rmi.server.hostname?

Sì. java.rmi.server.hostname non ha nulla a che fare con quale indirizzo IP viene ascoltato dall'oggetto remoto. Ciò è determinato dal RMIServerSocketFactory.

Per correggere il misquotation dal mio libro in un'altra risposta (poi cancellato): stringa

java.rmi.server.hostname: nome host; il valore predefinito è l'indirizzo IP dell'host locale nel formato "punteggiato-quad" ... che è incorporato negli stub remoti creati da questa JVM quando gli oggetti remoti vengono esportati. Questo può essere usato per controllare l'indirizzo IP effettivo dei server RMI esportati da host multi-homed. Questa proprietà viene letta esattamente una volta nella vita della JVM. [1]

Per espandere su quello, può anche essere utilizzato per controllare l'indirizzo IP effettivo (come visualizzato dai client) dei server RMI esportati dagli host che si trovano dietro i dispositivi NAT. Non ha necessariamente nulla a che fare con l'host locale, ad es. in situazioni NAT e può essere un nome host, un indirizzo IPv4 a quattro punti o un indirizzo IPv6.

[1] Pitt & McNiff, java.rmi, La Guida Remote Method Invocation, Addison Wesley 2001, p.258.

+0

TBH Non capisco quindi come influenza la configurazione su http://stackoverflow.com/a/32418821/241986 - senza questa riga smette di funzionare –

+0

@BorisTreukhov Ho risposto che. Colpisce ciò che entra nello stub. Non è l'indirizzo IP che ascolta. – EJP