inet4address example create java string inetaddress

example - ¿Hay una manera fácil de convertir String a Inetaddress en Java?



inetaddress java example (5)

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

Se comprueba la validez del formato de dirección.

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

Estoy tratando de convertir cadenas en Inetaddress . No estoy tratando de resolver nombres de host: las cadenas son direcciones ipv4. ¿ InetAddress.getByName(String host) ? ¿O tengo que analizarlo manualmente?


Puede intentar usar una expresión regular para filtrar las direcciones IP no numéricas antes de pasar la String a getByName() . Entonces getByName() no intentará la resolución de nombres.


Sí, eso funcionará. La API es muy clara 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, puede comprobarlo fácilmente.


La biblioteca Java de dirección IP de código abierto validará todas las representaciones estándar de IPv6 e IPv4 y lo hará sin búsqueda de DNS. Descargo de responsabilidad: Soy el administrador de proyectos de esa biblioteca.

El siguiente código hará lo que 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 }


com.google.common.net.InetAddresses.forString(String ipString) es mejor para esto, ya que no realizará una búsqueda de DNS independientemente de la cadena que se le pase.