2013-04-03 27 views
65

Ho l'indirizzo IP del server DNS e un nome host.Risoluzione indirizzo IP di un nome host

Utilizzando Java, come posso trovare l'indirizzo IP del nome host restituito da quel server DNS utilizzando l'indirizzo IP e il nome host?

+2

'dig ' in una riga di comando? – ceejayoz

+0

Come fare lo stesso nel codice java e dove dovrei usare l'indirizzo IP e il nome host del server DNS. –

+0

Un'altra query è la necessità di fornire l'indirizzo IP del server DNS in ogni caso o cercheremo di trovarlo per impostazione predefinita. Sono un po 'confuso qui se dobbiamo usare solo l'hostname o l'hostname + l'indirizzo IP del server DNS ? –

risposta

86

Dai uno sguardo allo InetAddress e al metodo getHostAddress().

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
+0

Dire se ho un indirizzo IP dns 10.37.221.152 e un nome host dice "www.student.com", quindi come posso trovare l'indirizzo IP. –

+2

@DarkMatter: 'InetAddress' dovrebbe ottenere l'indirizzo risolto DNS quando si richiede' getHostAddress() '. Non sono sicuro di poter forzare l'uso di un server DNS * specifico *. – thegrinner

+0

Quindi deve risolversi idealmente da solo senza che il programmatore specifichi esplicitamente l'indirizzo del server DNS? –

8

È possibile utilizzare InetAddress per questo. Prova il codice qui sotto,

InetAddress address = InetAddress.getByName("www.yahoo.com"); 
System.out.println(address.getHostAddress()); 
System.out.println(address.getHostName()); 
22

Si può fare in questo modo:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com")) 
    System.out.println(addr.getHostAddress()); 
4

Come suggerito da tutti sopra, è possibile utilizzare InetAddress.getByName("hostName") ma questo può dare un IP memorizzato nella cache, Leggere la documentazione Java per lo stesso. Se si desidera ottenere un IP dal DNS è possibile utilizzare:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName"); 
+0

Per qualche motivo questa chiamata mi dà risultato positivo per qualsiasi nome host. Ho pensato di default al mio IP, ma no, mi dà un IP specifico per qualsiasi host sconosciuto. – Imaskar

2

Oltre a quanto @daksh sottolineato, è possibile disabilitare la cache di risposta DNS come suggerito here ma essere consapevoli dei tempi di disabilitare la cache così come la memorizzazione nella cache delle risposte DNS effettuate dal tuo sistema operativo e da altri server DNS come suggerito here. Spero che questo aiuti

Problemi correlati