Programa Java para encontrar Dirección IP de tu Computadora

Codigos

Una dirección IP (Protocolo de Internet/Internet Protocol) es un identificador asignado a cada computadora y otro dispositivo (por ejemplo, un router, un móvil, etc.) conectado a una red TCP/IP que se utiliza para localizar e identificar el nodo en comunicación con otros nodos de la red. Las direcciones IP suelen escribirse y mostrarse en una notación legible para el ser humano, como 192.168.1.59 en IPv4 (dirección IP de 32 bits).

Una dirección IP cumple dos funciones principales: la identificación de la interfaz del host o de la red y el direccionamiento local. Su función se ha caracterizado de la siguiente manera : “Un nombre indica lo que buscamos. Una dirección indica dónde está. Una ruta indica cómo llegar allí“.

1. Trabajar con la clase InetAddress

La biblioteca de clases de Java proporciona una clase InetAddress para trabajar con direcciones IP. Con su ayuda, la aplicación puede determinar la dirección IP del host local, así como la dirección del host remoto especificado por su nombre de dominio.

Aquí están los prototipos de los métodos más interesantes de esta clase:

public static InetAddress getLocalHost();
public static InetAddress
getByName(String host);
public static InetAddress[]
getAllByName(String host);
public byte[] getAddress();
public String toString();
public String getHostName();
public boolean equals(Object obj);

Ten en cuenta que la creación de un objeto de la clase InetAddress se realiza sin usar el operador new, sino con los métodos estáticos getLocalHost, getByName y getAllByName.

El método getLocalHost crea un objeto de la clase InetAddress para el host local, es decir, para la estación de trabajo en la que se ejecuta la aplicación Java:

InetAddress iaLocal;
iaLocal = InetAddress.getLocalHost();

Si estád interesado en un host remoto, pueded crear un objeto de la clase InetAddress para él utilizando los métodos getByName o getAllByName. El primero devuelve la dirección del host y el segundo devuelve una matriz de todas las direcciones IP asociadas con este host.

Si no existe un host con el nombre especificado, se lanza una UnknownHostException cuando se ejecutan los métodos getByName y getAllByName.

Los métodos getByName y getAllByName pueden pasar no solo un nombre de host, como www.sun.com, sino también una cadena de dirección IP como cuatro números decimales separados por puntos.

Echemos un vistazo rápido a los otros métodos de la clase InetAddress.

  • El método getAddress devuelve una matriz de cuatro bytes de la dirección IP del objeto. El byte en el índice cero de esta matriz contiene el byte más significativo de la dirección IP.
  • El método toString devuelve una cadena de texto que contiene el nombre de host, el separador ‘/’ y la dirección IP como cuatro números decimales separados por puntos.
  • Con el método getHostName, puedes determinar el nombre del host para el que se creó el objeto de la clase InetAddress.
  • Finalmente, el método equals sirve para comparar direcciones IP como objetos de clase InetAddress.

2. Descripción de Ejemplo

La aplicación independiente descrita en esta sección demuestra cómo trabajar con la clase InetAddress.

Después de tomar el control, nuestra aplicación determina e imprime en la consola la dirección del host local, el nombre del host local extraído de esta dirección y su dirección IP:

A continuación, la aplicación solicita la dirección del host remoto desde la consola. Luego de ingresarlo, la pantalla muestra información similar a la obtenida para el nodo local:

Dirección de host local
------------------------
Dirección: DESKTOP-J40AJBG/192.168.1.158
Nombre de host: DESKTOP-J40AJBG
Dirección IP: 192.168.1.158
Ingresa dirección ('quit' para salir):

A continuación, la aplicación solicita la dirección del host remoto desde la consola. Luego de ingresarlo, la pantalla muestra información similar a la obtenida para el nodo local:

Dirección de host remoto
------------------------
Dirección: javadesdecero.es/172.67.141.244
Nombre de host: javadesdecero.es
Dirección IP: 172.67.141.244

Ten en cuenta que varias direcciones IP pueden corresponder a un nombre de dominio.

Veamos a detalle el código fuente de la aplicación.

2.1. Método Main

Para poder trabajar con clases de red Java, importamos la biblioteca de clases java.net. *:

import java.net.*;
import java.util.*;

Después de obtener el control, el método principal intenta crear un objeto de la clase InetAddress para el nodo local (es decir, para el nodo en el que se ejecuta nuestra aplicación):

String s;
        InetAddress iaLocalAddress = null;
        InetAddress iaRemoteAddress = null;
        InetAddress[] iaRemoteAll;

        try
        {
            iaLocalAddress =
                    InetAddress.getLocalHost();
        }
        catch(UnknownHostException ex)
        {
            System.out.println(ex.toString());
        }

El método getLocalHost puede lanzar una UnknownHostException, por lo que hemos proporcionado nuestro propio controlador.

A continuación, el método principal llama al método printInetAddresssInfo, que muestra el nombre y la dirección IP correspondientes al objeto de la clase InetAddress pasado como parámetro a la consola:

printInetAddresssInfo(iaLocalAddress);

El siguiente paso inicia un bucle en el que el método principal consulta las direcciones de los nodos remotos, y luego obtiene la información de la dirección para ellos y la imprime en la consola:

while(true)
        {
            System.out.println(
                    "Ingresa dirección ('quit' para salir): ");

            s = new String(getKbdString());
            if(s.equals("quit"))
                break;
//...al final te proporcionaré el código completo

Para finalizar el bucle, en lugar de la dirección, debes ingresar la cadena “quit”.

Dentro del bucle, para cada nodo remoto, llamamos a los métodos getByName y getAllByName:

InetAddress iaRemoteAddress = null;
InetAddress[] iaRemoteAll;
 try
            {
                iaRemoteAddress =
                        InetAddress.getByName(s);

                iaRemoteAll =
                        InetAddress.getAllByName(s);
            }
            catch(UnknownHostException ex)
            {
                System.out.println(ex.toString());
                continue;
            }

El primero devuelve una dirección IP como un objeto de clase InetAddress, y el segundo devuelve una matriz de dichos objetos para todas las direcciones IP de un host determinado.

Llamar a los métodos getByName y getAllByName puede generar una UnknownHostException. En este caso, asumimos que el usuario ingresó la dirección incorrecta del nodo remoto y repetimos la iteración actual del ciclo para ingresar una nueva dirección.

A continuación, imprimimos en la consola el contenido del objeto iaRemoteAddress y la matriz iaRemoteAll:

printInetAddresssInfo(iaRemoteAddress);

for(int i = 0;i < iaRemoteAll.length; i++)
            {
                printInetAddresssInfo(iaRemoteAll);
            }

2.2. Método printInetAddresssInfo

El método printInetAddresssInfo muestra la información almacenada en un objeto de la clase InetAddress. Se pasa una referencia a este objeto al método a través de un único parámetro.

La información se muestra en varias etapas.

Primero, mostramos una representación textual del objeto InetAddress, útil para depurar:

System.out.println("Dirección: " + ia);

El nombre de host se recupera mediante el método getHostName:

System.out.println("Nombre de host: " +
ia.getHostName());

Para mostrar la dirección IP como cuatro números decimales separados por puntos, primero llenamos la matriz de IP usando el método getAddress:

byte[] ip = new byte;
ip = ia.getAddress();

A continuación, imprimimos los valores de los números en la consola:

System.out.println("Dirección IP: " +
                (0xff & (int)ip) + "." +
                (0xff & (int)ip) + "." +
                (0xff & (int)ip) + "." +
                (0xff & (int)ip));

Para convertir valores negativos en positivos, tenemos que realizar una suma lógica con la máscara 0xff.

3. Código y Resultado

El código fuente final, es el siguiente:

// ==========================================
// InetAddresDemo.java
// E-mail: contacto@javadesdecero.es
// Web:    https://javadesdecero.es
// ==========================================
import java.net.*;
import java.util.*;

public class InetAddresDemo
{
    public static void main(String args[])
    {
        String s;
        InetAddress iaLocalAddress = null;
        InetAddress iaRemoteAddress = null;
        InetAddress[] iaRemoteAll;

        try
        {
            iaLocalAddress =
                    InetAddress.getLocalHost();
        }
        catch(UnknownHostException ex)
        {
            System.out.println(ex.toString());
        }

        System.out.println(
                "------------------------");
        System.out.println("Dirección de host local");
        System.out.println(
                "------------------------");

        printInetAddresssInfo(iaLocalAddress);

        while(true)
        {
            System.out.println(
                    "Ingresa dirección ('quit' para salir): ");

            s = new String(getKbdString());
            if(s.equals("quit"))
                break;

            try
            {
                iaRemoteAddress =
                        InetAddress.getByName(s);

                iaRemoteAll =
                        InetAddress.getAllByName(s);
            }
            catch(UnknownHostException ex)
            {
                System.out.println(ex.toString());
                continue;
            }

            System.out.println(
                    "------------------------");
            System.out.println("Dirección de host remoto");
            System.out.println(
                    "------------------------");

            printInetAddresssInfo(iaRemoteAddress);

            System.out.println(
                    "------------------------");
            System.out.println(
                    "Todas las direcciones de host remotas");
            System.out.println(
                    "------------------------");

            for(int i = 0;i < iaRemoteAll.length; i++)
            {
                printInetAddresssInfo(iaRemoteAll);
            }
        }
    }

    // ============================================
    // printInetAddresssInfo
    // ============================================
    static void
    printInetAddresssInfo(InetAddress ia)
    {
        System.out.println("Dirección: " + ia);

        System.out.println("Nombre de host: " +
                ia.getHostName());

        byte[] ip = new byte;

        ip = ia.getAddress();

        System.out.println("Dirección IP: " +
                (0xff & (int)ip) + "." +
                (0xff & (int)ip) + "." +
                (0xff & (int)ip) + "." +
                (0xff & (int)ip));
    }

    // ============================================
    // getKbdString
    // ============================================
    static public String getKbdString()
    {
        byte bKbd[] = new byte;
        int iCnt = 0;
        String szStr = "";

        try
        {
            iCnt = System.in.read(bKbd);
        }
        catch(Exception ex)
        {
            System.out.println(ex.toString());
        }

        szStr = new String(bKbd, 0, iCnt);
        szStr = szStr.trim();
        return szStr;
    }
}

La salida obtenido será similar a lo siguiente:

Salida de Programa Java Dirección IP
Salida de Programa Java Dirección IP
------------------------
Dirección de host local
------------------------
...
------------------------
Dirección de host remoto
------------------------
...

Nota: La salida anterior fue ejecuta en el IDE de IntelliJ IDEA. Puedes hacerlo tú mismo utilizando cualquiera de los 5 mejores IDE para programadores y desarrolladores Java.

Es casi seguro que usar una VPN resultará en obtener una dirección IP diferente, puesto que una conexión a una red privada virtual a menudo oculta tu dirección IP real. Por otra parte, una red privada virtual protegerá los datos que transfieras a través de una red WiFi pública. Así que, no sería una locura estar eligiendo la mejor VPN para ti.

¡Atención lector! No dejes de aprender ahora. Sigue paso a paso todos los conceptos importantes de Java en este sitio web de manera gratuita y prepárate para la industria.

Sobre el Autor:

Hey hola! Yo soy Alex Walton y tengo el placer de compartir conocimientos hacía ti sobre el tema de Programación en Java, desde cero, Online y Gratis.

Deja una Respuesta

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.