Obtener la IP de un Host

08/Ago/2007 Java , 7 Comentarios

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.

  1. int numero;
  2. 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.....

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

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

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

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

  1. String numero;
  2.  
  3. for (int x=0; x < arrayBytes.length; x++) {
  4. if (x > 0) {
  5. numero += ".";
  6. }
  7. numero += (arrayBytes[x]<0)?Integer.toString(arrayBytes[x]+256):Integer.toString(arrayBytes[x]);
  8. }

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.....

  1. String numero;
  2.  
  3. for (int x=0; x < arrayBytes.length; x++) {
  4. if (x > 0) {
  5. numero += ".";
  6. }
  7. numero += arrayBytes[x] & 255;
  8. }

Vídeos sobre Java


7 comentarios en “Obtener la IP de un Host”

Víctor Cuervo

acal

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

Víctor Cuervo

william

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

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

Víctor Cuervo

Jesus

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

Víctor Cuervo

sara

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

Víctor Cuervo

luis

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

Víctor Cuervo

johnny

muy buen tutorial

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*