package ar.com.javacuriosities.networking; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; /* * La clase InetAddress representa una dirección IP, ofrece métodos * para obtener direcciones IP por medio de nombres o IPs, para la resolución * de nombres a IP utiliza configuración del sistema y servicios DNS * * La resolución de Host Name puede estar en cache (TTL: Time-to-live) ya sea por resultado positivo o negativo, esto se * lo conoce como * * Resolución positiva: * networkaddress.cache.ttl (default: -1) * -1 --> Cache forever * * Resolución negativa * networkaddress.cache.negative.ttl (default: 10) * 0 --> Never cache * -1 --> Cache forever * * Dependiendo si es IPv6 el objeto retornado es Inet6Address y si es IPv4 retorna Inet4Address * */ public class Step2InetAddress { public static void main(String[] args) { try { InetAddress localHost = InetAddress.getLocalHost(); printInformation(localHost); InetAddress loopback = InetAddress.getLoopbackAddress(); printInformation(loopback); InetAddress loopbackByIp = InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }); printInformation(loopbackByIp); InetAddress googleHost = InetAddress.getByName("www.google.com"); printInformation(googleHost); System.out.println("****************"); // Dado que un dominio puede tener multiples IP asignadas podemos usar el método getAllByName() InetAddress[] multiplesInetAddresses = InetAddress.getAllByName("www.google.com"); for (InetAddress ipAddress : multiplesInetAddresses) { System.out.println(ipAddress); } // Obtenemos los bytes de la IP byte[] bytes = localHost.getAddress(); /* * Si solicitamos la IP esta es devuelta en un array de bytes el * cual debemos tener cuidado al convertirlo. * * El siguiente ciclo convierte los bytes de la dirección IP a * valores sin signo y los presenta separados por espacios, recordar * que en Java no hay tipo unsigned por eso pueden ser negativos y * si es negativo significa que su valor es mas alto que 127 */ for (int currentByte = 0; currentByte < bytes.length; currentByte++) { int fixingConvertion = bytes[currentByte] < 0 ? bytes[currentByte] + 256 : bytes[currentByte]; System.out.print(fixingConvertion + "."); } // InetAddress.getByName("www.no_existo.com.ar"); } catch (UnknownHostException e) { // Esta exception es arrojada cuando una IP o Host no puede ser // determinado // Log and Handle exception e.printStackTrace(); } catch (IOException e) { // Log and Handle exception e.printStackTrace(); } } private static void printInformation(InetAddress inetAddress) throws IOException { System.out.println("****************"); System.out.println("Information --> " + inetAddress); System.out.println("InetAddress: " + inetAddress); System.out.println("Host Name: " + inetAddress.getHostName()); // Intentara devolver el FQDN System.out.println("Canonical Host Name: " + inetAddress.getCanonicalHostName()); System.out.println("Host Address: " + inetAddress.getHostAddress()); System.out.println("Is Any Local: " + inetAddress.isAnyLocalAddress()); System.out.println(" - Is Link Local: " + inetAddress.isLinkLocalAddress()); System.out .println(" - Is Loopback: " + inetAddress.isLoopbackAddress()); System.out.println(" - Is Multicast: " + inetAddress.isMulticastAddress()); System.out.println(" - Is Site Local: " + inetAddress.isSiteLocalAddress()); System.out.println("Is Reachable in 2 seconds: " + inetAddress.isReachable(2000)); } }