Risoluzione dell'indirizzo IP di un nome host


88

Ho l'indirizzo IP del server DNS e 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?


3
dig <hostname>in una riga di comando?
ceejayoz

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

Un'altra domanda avremo bisogno di fornire l'indirizzo IP del server DNS in ogni caso o proverà a trovarlo per impostazione predefinita Sono un po 'confuso qui se dobbiamo usare solo il nome host o il nome host + anche l'indirizzo IP del server dns?
Dark Matter

1
La ricerca dell'indirizzo utilizzando il nome non è complicata. Finché usi solo il resolver predefinito del sistema. Quindi: hai davvero bisogno di utilizzare l'indirizzo del server DNS?
AH

Ho la stessa domanda: ho davvero bisogno dell'indirizzo del server DNS o risolverà l'indirizzo per impostazione predefinita.BTW Sto usando un server Unix AIX.
Dark Matter

Risposte:


131

Dai un'occhiata a InetAddresse al getHostAddress()metodo.

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

Diciamo che se ho un indirizzo IP DNS 10.37.221.152 e un nome host dice "www.student.com", allora come posso trovare l'indirizzo IP.
Dark Matter

3
@ DarkMatter: InetAddressdovrebbe ottenere l'indirizzo DNS risolto quando lo chiedi getHostAddress(). Non sono sicuro che sia possibile forzarlo a utilizzare un server DNS specifico .
thegrinner

Quindi deve idealmente risolversi da solo senza che il programmatore specifichi esplicitamente l'indirizzo del server DNS, giusto?
Dark Matter

1
@DarkMatter Sì. Credo che utilizzi qualunque server DNS sia impostato sul computer stesso.
thegrinner

31

Puoi farlo in questo modo:

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

9

È possibile utilizzare InetAddress per questo. Prova il codice seguente,

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

3

Come suggerito da tutto sopra, puoi usare InetAddress.getByName("hostName")ma questo può darti un IP memorizzato nella cache, leggi la documentazione di java per lo stesso. Se vuoi ottenere un IP dal DNS puoi usare:

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

Oltre a quanto indicato da @daksh, puoi disabilitare la cache delle risposte DNS come suggerito qui, ma fai attenzione ai tempi di disabilitazione della cache e alla memorizzazione nella cache delle risposte DNS effettuate dal tuo sistema operativo e da altri server DNS come suggerito qui . Spero che questo aiuti
CrazyGreenHand

Per qualche motivo questa chiamata mi dà risultati positivi per qualsiasi nome host. Pensavo di aver impostato il mio IP come predefinito, ma no, mi dà un IP specifico per qualsiasi host sconosciuto.
Imaskar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.