Creando objeto InetAddress en Java

81

Estoy tratando de convertir una dirección especificada por un número de IP o un nombre, ambos en String (es decir, localhosto 127.0.0.1), en un objeto InetAdress . No hay constructor sino métodos estáticos que devuelven una InetAddress . Entonces, si obtengo un nombre de host, no es un problema, pero ¿qué pasa si obtengo el número de IP? Hay un método que obtiene el byte [] pero no estoy seguro de cómo me puede ayudar. Todos los demás métodos obtienen el nombre de host.

Documentación de la API de InetAddress

yotamoo
fuente

Respuestas:

133

Debería poder utilizar getByName o getByAddress .

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.

InetAddress addr = InetAddress.getByName("127.0.0.1");

El método que toma una matriz de bytes se puede usar así:

byte[] ipAddr = new byte[]{127, 0, 0, 1};
InetAddress addr = InetAddress.getByAddress(ipAddr);
Bala R
fuente
3
¿Qué haces cuando tienes números mayores que 127? Por ejemplo IP 192.168.0.1. ¿Enmascara int con 0xFF? ¿O simplemente echas int a byte?
Matej Kormuth
@MatejKormuth Creo que el enmascaramiento con 0xFF debería funcionar.
Bala R
1
@ matej-kormuth también puedes expresarlo como lo hace Inet4AddressImpl:byte[] loopback = {0x7f,0x00,0x00,0x01};
Carlos Ferreyra
"El constructor predeterminado no puede manejar el tipo de excepción UnknownHostException lanzada por el superconstructor implícito. Debe definir un constructor explícito"
Schütze
Ayuda a incluir la creación de InetAddress en una declaración try / catch.
Matthew Redmond
9

Desde la API para InetAddress

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. Si se proporciona una dirección IP literal, solo se verifica la validez del formato de la dirección.

Karakuricoder
fuente
7
ip = InetAddress.getByAddress(new byte[] {
        (byte)192, (byte)168, (byte)0, (byte)102}
);
Musa
fuente
3

InetAddress.getByName también funciona para direcciones IP.

Desde JavaDoc

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. Si se proporciona una dirección IP literal, solo se verifica la validez del formato de la dirección.

kliu
fuente
3

La API es bastante fácil de usar.

// Lookup the dns, if the ip exists.
 if (!ip.isEmpty()) {
     InetAddress inetAddress = InetAddress.getByName(ip);
     dns = inetAddress.getCanonicalHostName(); 
 }
Cuenta
fuente
0

Este es un proyecto para obtener la dirección IP de cualquier sitio web, es útil y muy fácil de hacer.

import java.net.InetAddress;
import java.net.UnkownHostExceptiin;

public class Main{
    public static void main(String[]args){
        try{
            InetAddress addr = InetAddresd.getByName("www.yahoo.com");
            System.out.println(addr.getHostAddress());

          }catch(UnknownHostException e){
             e.printStrackTrace();
        }
    }
}
Fridjato Part Fridjat
fuente