127.0.0.1 es el adaptador de bucle invertido - es una respuesta perfectamente correcta a la (algo malfomed) pregunta "¿cuál es mi dirección IP?"
El problema es que hay múltiples respuestas correctas a esa pregunta.
EDIT: La documentación para getLocalHost
dicen:
Si hay un controlador de seguridad, su método checkConnect se llama con el nombre de host local y -1 como sus argumentos para ver si la operación es permitido. Si la operación no es permitida, se devuelve una dirección InetAddress que representa la dirección de bucle invertido.
¿Es posible que el cambio en el comportamiento se deba a un cambio en los permisos?
EDIT: Creo que NetworkInterface.getNetworkInterfaces
es lo que necesita para enumerar todas las posibilidades. He aquí un ejemplo que no muestra direcciones virtuales, pero trabaja para "principales" interfaces:
import java.net.*;
import java.util.*;
public class Test
{
public static void main(String[] args)
throws Exception // Just for simplicity
{
for (Enumeration<NetworkInterface> ifaces =
NetworkInterface.getNetworkInterfaces();
ifaces.hasMoreElements();)
{
NetworkInterface iface = ifaces.nextElement();
System.out.println(iface.getName() + ":");
for (Enumeration<InetAddress> addresses =
iface.getInetAddresses();
addresses.hasMoreElements();)
{
InetAddress address = addresses.nextElement();
System.out.println(" " + address);
}
}
}
}
(me había olvidado cuán horrible del tipo Enumeration<T>
es trabajar con directamente!)
Aquí están los resultados en mi portátil ahora mismo:
lo:
/127.0.0.1
eth0:
/169.254.148.66
eth1:
eth2:
ppp0:
/10.54.251.111
(yo no creo que sea regalar cualquier enormemente información sensible :)
Si sabe qué interfaz de red desea usar, llame al NetworkInterface.getByName(...)
y luego mire las direcciones para esa interfaz (como se muestra en el código anterior).
En el ciclo anterior, también puede omitir el bucle de retroceso al marcar NetworkInterface # isLoopback(). – omerkudat
¿Por qué hay una barra antes de la dirección IP? –
@ Matías Es el toString de Java de un objeto InetAddress use address.getHostAddress() para obtener solo los números separados por puntos. –