Resolución de la dirección IP de un nombre de host

86

Tengo la dirección IP del servidor DNS y un nombre de host.

Usando Java, ¿cómo puedo encontrar la dirección IP del nombre de host devuelto por ese servidor DNS usando la dirección IP y el nombre de host?

Materia oscura
fuente
3
dig <hostname>en una línea de comandos?
ceejayoz
Cómo hacer lo mismo en el código java y dónde debo usar la dirección IP y el nombre de host del servidor DNS.
Dark Matter
Otra consulta, ¿tendremos que proporcionar la dirección IP del servidor DNS en cualquier caso o intentará encontrarla de forma predeterminada? Estoy un poco confundido aquí si necesitamos usar solo el nombre de host o el nombre de host + la dirección IP del servidor dns también.
Dark Matter
1
La búsqueda de la dirección con el nombre no es complicada. Siempre que use el resolutor predeterminado del sistema. Entonces: ¿realmente necesitas usar la dirección del servidor DNS?
AH
Tengo la misma pregunta: ¿Realmente necesito la dirección del servidor DNS o resolverá la dirección de forma predeterminada? BTW Estoy usando un servidor AIX Unix.
Dark Matter

Respuestas:

127

Echar un vistazo a InetAddress, y el getHostAddress()método.

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
thegrinner
fuente
Digamos que si tengo una dirección IP dns 10.37.221.152 y un nombre de host dice "www.student.com", entonces, ¿cómo puedo encontrar la dirección IP?
Dark Matter
3
@DarkMatter: InetAddressdebería obtener la dirección de DNS resuelta cuando la solicite getHostAddress(). Sin embargo, no estoy seguro de si puede obligarlo a usar un servidor DNS específico .
thegrinner
Entonces, idealmente, debe resolverse solo sin que el programador especifique explícitamente la dirección del servidor DNS, ¿verdad?
Dark Matter
1
@DarkMatter Sí. Creo que usa cualquier servidor DNS configurado en la propia computadora.
thegrinner
29

Puedes hacerlo así:

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

Puede usar InetAddress para esto. Pruebe el siguiente código,

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

Como lo sugirió todo lo anterior, puede usar, InetAddress.getByName("hostName")pero esto puede darle una IP en caché, lea la documentación de Java para el mismo. Si desea obtener una IP de DNS, puede usar:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");
daksh
fuente
Además de lo que señaló @daksh, puede deshabilitar la memoria caché de respuesta de DNS como se sugiere aquí, pero tenga en cuenta el momento para deshabilitar la memoria caché, así como el almacenamiento en caché de las respuestas de DNS realizadas por su sistema operativo y otros servidores DNS como se sugiere aquí . Espero que esto ayude
CrazyGreenHand
Por alguna razón, esta llamada me da un resultado positivo para cualquier nombre de host. Pensé que tenía mi IP por defecto, pero no, me da una IP específica para cualquier host desconocido.
Imaskar