2010-02-22 12 views

Respuesta

17

com.google.common.net.InetAddresses.forString(String ipString) es mejor para esto ya que no hará una búsqueda de DNS independientemente de qué cadena se le pasa.

+0

Esto es parte [de Guava] (http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/com/google/common/net/InetAddresses.html). –

+0

Debería ser 'com.google.common.net.InetAddresses.forString' (con' InetAddresses' con mayúscula A). SO no me permitirá corregir eso en tu respuesta, ya que la edición tiene que tener al menos 6 caracteres. ;-) De todos modos, gracias, estaba buscando, y una vez más, Guava salva el día. – silmeth

13

Sí, eso funcionará. The API es muy claro en esto ("El nombre de host puede ser un nombre de máquina, como" java.sun.com ", o una representación textual de su dirección IP"), y, por supuesto, podría verificarlo fácilmente.

+1

Gracias, busqué la API, y se perdió esa línea. – TiansHUo

+0

¿Cuál es cuando host es un patrón como 192.168.0. *? ¿Eso funcionará también? En cuanto al documento Inet4Address, parece que hay soporte para esto. – Paranaix

+0

@Paranaix, no, lanzará una 'IllegalArgumentException' con el mensaje" especificación de comodín de host no válido " –

3

Cuidado: parece que analizar una dirección no válida como InetAddress.getByName("999.999.999.999") se no resultado de una excepción como uno podría esperar de la frase de la documentación:

la validez del formato de dirección se comprueba

Empíricamente, me encuentro obteniendo una instancia de InetAddress con la dirección IP bruta de la máquina local y la dirección IP no válida como nombre de host. ¡Ciertamente esto no era lo que esperaba!

+2

A partir de Java 7, arrojará una excepción UnknownHostException; no he verificado antes a Javas, pero también esperaría una excepción allí. –

0

The open-source IPAddress Java library validará todas las representaciones estándar de IPv6 e IPv4 y lo hará sin búsqueda de DNS. Descargo de responsabilidad: soy el gerente de proyecto de esa biblioteca.

El siguiente código hará lo que usted está solicitando:

 String s = "1.2.3.4"; 
    try { 
      IPAddressString str = new IPAddressString(s); 
      IPAddress addr = str.toAddress(); 
      InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6 
      if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific 
       IPv4Address ipv4Addr = addr.toIPv4(); 
       Inet4Address inetAddr = ipv4Addr.toInetAddress(); 
       //use address 
      } 
     } catch(AddressStringException e) { 
      //e.getMessage has validation error 
     } 
Cuestiones relacionadas