feed twitter facebook LinkedIn facebook

Java » Obtener la IP de un Host

Agosto 8, 2007 por Víctor Cuervo . 20968 visitas 7 Comentarios Imprimir Imprimir

Para obtener la dirección IP de una maquina lo primero que debemos de hacer es construir una clase InetAddress a partir de una URL. Esta clase la encontraremos en el paquete java.net. Ejemplos de URL serían www.lineadecodigo.com, www.google.com, www.w3api.com,...

Para instanciar la clase utilizaremos la función getByName(sURL) a la cual pasaremos como parámetro una cadena de caracteres que contenga la URL de la cual queremos conocer su dirección IP.

Una vez construida la clase InetAddress invocaremos el método getAddress el cual nos devolverá un array de bytes de cuatro posiciones. Cada una de las posiciones contiene en codificación binaria el número correspondiente a la mascara de la IP A.B.C.D. Como sabemos dichos números pueden estar en el rango 0..255

Ahora viene el paso "más lioso". Java no entiende de números sin signo a si que en un byte están codificados los números 0 a 128 como enteros y 129 a 255 como negativos equivaliendo, estos, a -1 a -127. En resumidas cuentas que el -1 equivale al 255 y el -127 al 129. De tal manera que tenemos todo el rango de números del 0 al 255.

Una primera solución a nuestro problema es usar el operador condicional()?:. Si el numero es positivo lo dejamos tal cual, si es un número negativo le sumamos 256, para obtener el número real. De esta manera, la solución nos quedaría algo así.

Para el primer numero.

int numero;
numero = (arrayBytes[0]<0)?arrayBytes[0]+256:arrayBytes[0];

Una buena solución. Ahora tenemos en cuenta de que lo vamos a dejar en una cadena de caracteres. Usemos el toString.....

String numero;
numero = (arrayBytes[0]<0)?Integer.toString(arrayBytes[0]+256):Integer.toString(arrayBytes[0]);

Todo esto en un bucle para recorrer los 4 números.

String numero;
for (int x=0; x < arrayBytes.length; x++) {
  numero += (arrayBytes[x]<0)?Integer.toString(arrayBytes[x]+256):Integer.toString(arrayBytes[x]);
}

Se nos olvidaban los puntos de la dirección... Antepondremos un punto a todos los números menos al primero, es decir, al 0.

String numero;
for (int x=0; x < arrayBytes.length; x++) {
  if (x > 0) {
    numero += ".";
  }
   numero += (arrayBytes[x]<0)?Integer.toString(arrayBytes[x]+256):Integer.toString(arrayBytes[x]);
}

Pues parece que ya esta todo....... Pero veamos una última cosa. Especialmente dedicada a los amantes de los bytes o a aquellas personas donde la ejecución de un programa varía .0010 sg a .0200 sg ........ puro manejo de bits.

Si queremos que a una ristra de bits con signo le desaparezca el bit del signo (el primero de todos). Le aplicamos el operador & con un número igual de bits ( en este caso 8 ) de tal manera que el operador desaparece a la izquierda.

El bucle quedaría de la siguiente forma.....

String numero;
for (int x=0; x < arrayBytes.length; x++) {
  if (x > 0) {
    numero += ".";
  }
  numero += arrayBytes[x] & 255;
}

Visualizar el ejemplo | Descargar el código

tags: ,

Artículos relacionados:

7 comentarios »

Redifusión RSS de los comentarios de la entrada. TrackBack URI

  1. johnny
    Septiembre 25, 2007 #

    muy buen tutorial

  2. luis
    Febrero 13, 2008 #

    pesimo codigo , se ve que no saben programar… demasiado tardado , mcuhas lineas de coidigo …..mmmmm. no me gusto

  3. sara
    Febrero 17, 2009 #

    yo lo que nasecito saber es por que un codigo ip es hasta el 255 la profe de sistemas me mando a averiguarlo diganme por que es hasta el 255 nada mas? garcias se que captaron mi mensaje

  4. Jesus
    Febrero 17, 2009 #

    Es hasta el 255 porque se utilizan 8 bits para direccionar.
    Los pesos de los bits comienzan de 0 a 7 leyendelos de derecha a izquierda es decir el bit más a la derecha tiene un peso de 0 y el situado más a la izquierda un peso de 7.

    Por eso: 2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=255

  5. william
    Mayo 13, 2009 #

    en este sitio indica como obtener la ip de la maquina cliente que consume los servicios

    http://www.lamediacancha.com/tecnologia.html

  6. Linea de Codigo » Obtener el nombre e IP del servidor con Java
    Octubre 3, 2009 #

    [...] Este proceso se explica en detalle en el artículo Obtener la IP de un Host. [...]

  7. acal
    Agosto 8, 2010 #

    quiero saber como se pueden obtener las direcciones IP de una red local

Deje un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*