2012-05-11 17 views
9

En mi aplicación Java, si el usuario ingresa la IP, necesitamos mostrar el nombre de host, si se proporciona el nombre de host, entonces tenemos que mostrar la IP del host.conversión de una dirección IP a nombre de host

Por ejemplo, si el usuario ingresa una dirección IP como 173.194.36.37, la aplicación debería mostrar google.com y viceversa.

¿Hay utilidades disponibles para realizar esta operación?

+0

¿sabe que un número de IP puede tener varios nombres de host? por ejemplo, 127.0.0.1 tiene * both * localhost y localhost.localdomain – vidstige

+0

@vidstige No con DNS inverso. Aquí el IP se asigna a exactamente un nombre de host, el llamado "nombre de host canónico". – glglgl

+1

no se puede obtener un resultado único, vea http://aruljohn.com/ip2hostname.html para 173.194.36.37 vea bom04s02-in-f5.1e100.net no google.com! – SjB

Respuesta

17

Si está codificando en Java, intente utilizar InetAddress

InetAddress addr = InetAddress.getByName("173.194.36.37"); 
String host = addr.getHostName(); 
System.out.println(host); 
+4

Obviamente, no olvide el manejo de excepciones para UnknownHostException. – ccKep

2

Lo que estás buscando es algo llamado DNS. This project parece ser lo que estás buscando.

+0

No es necesario traer bibliotecas de terceros si hay 'InetAddress.getHostName()'. –

+2

@PhilippReichart La pregunta dice "¿Hay utilidades disponibles?", Entonces pienso por qué no las bibliotecas de código abierto de terceros. –

+0

@PrakashK Simplicidad. ¿Por qué traer * más de 100 * clases cuando todo lo que desea se puede lograr llamando a un método existente? Mucho menos partes móviles, mucho menos para salir mal. –

0

En términos de nombre de dominio, no hay construido en los servicios públicos, no. Usted puede obtener el nombre de un host (pero no el nombre de dominio) usando getCanonicalHostName() en InetAddress - eso debería funcionar. La mejor respuesta aquí está vinculada al proyecto DNS Java, que le proporcionará el nombre de dominio.

Ejemplo de código para conectarse a, y obtener el nombre de host de uno de los servidores de Google es la siguiente:

public class GetHostName { 
public static void main(String[] args) throws Exception { 
    InetAddress address = InetAddress.getByAddress(new byte[]{74, 125,(byte) 227, 7}); 
    System.out.println(address.getCanonicalHostName()); 
} 
} 
2

Los SomeKittens proyecto mencionados que se parece a un servidor DNS completo, escrito en Java, lo que podría sé más de lo que necesitas Eche un vistazo a java.net.InetAddress:

java.net.InetAddress.getByName("example.com").getHostAddress(); 
+0

Para Google.com este código me da "74.125.237.100" como resultado. – Jon

+0

Y esto es correcto, ¿verdad? Si voy a http://74.125.237.100/ termino en google.com. – Brian

+0

No. El OP pidió algo que le daría el nombre de dominio dada una dirección IP. El código anterior proporciona el reverso completo: una dirección IP con un nombre de dominio. – Jon

Cuestiones relacionadas