127.0.0.1 jest adapter sprzężenia zwrotnego - jest to całkowicie poprawne odpowiedzi na (nieco malfomed) pytanie „Jaki jest mój adres IP?”
Problem polega na tym, że istnieje wiele poprawnych poprawnych odpowiedzi na to pytanie.
EDIT: Docs dla getLocalHost
powiedzieć:
Jeśli nie jest menedżerem bezpieczeństwa, jego metoda checkConnect nazywa się z lokalną nazwę hosta i -1 jako jego argumentów, aby zobaczyć czy operacja jest dozwolone. Jeśli operacja nie jest dozwolona, zwracany jest adres InetAdres reprezentujący adres pętli zwrotnej.
Czy to możliwe, że zmiana w zachowaniu wynika ze zmiany uprawnień?
EDYCJA: Uważam, że NetworkInterface.getNetworkInterfaces
jest tym, czego potrzebujesz, aby wyliczyć wszystkie możliwości. Oto przykład, który nie pokazuje adresy wirtualne, ale pracuje dla „main” interfejsów:
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);
}
}
}
}
(Zapomniałam, jak okropny typ Enumeration<T>
jest pracować bezpośrednio!)
Oto wyniki na moim laptopie właśnie teraz:
lo:
/127.0.0.1
eth0:
/169.254.148.66
eth1:
eth2:
ppp0:
/10.54.251.111
(I nie sądzę, że to rozdaje żadnych ogromnie poufnych informacji :)
Jeśli wiesz, którego interfejsu sieciowego chcesz użyć, zadzwoń pod numer NetworkInterface.getByName(...)
, a następnie przejrzyj adresy tego interfejsu (jak pokazano w powyższym kodzie).
W powyższej pętli można również po prostu pominąć pętlę zwrotną, zaznaczając pole NetworkInterface # isLoopback(). – omerkudat
Dlaczego istnieje ukośnik przed adresem IP? –
@ Matías To jest Java toString obiektu InetAddress użyj adresu .getHostAddress(), aby uzyskać tylko numery oddzielone kropkami. –