Testuję naszą aplikację serwerową (napisaną w Javie) na różnych systemach operacyjnych i pomyślałem, że OpenSolaris (2008.11) będzie najmniej kłopotliwy ze względu na ładną integrację z Javą. Okazuje się, że się myliłem, ponieważ otrzymałem UnknownHostException
try {
computerName = InetAddress.getLocalHost().getHostName();
if (computerName.indexOf(".") > -1)
computerName = computerName.substring(0,
computerName.indexOf(".")).toUpperCase();
} catch (UnknownHostException e) {
e.printStackTrace();
}
Wynik to:
java.net.UnknownHostException: desvearth01: desvearth01
at java.net.InetAddress.getLocalHost(InetAddress.java:1353)
Jednak nslookup desvearth01
zwraca poprawny adres IP i nslookup localhost
zwraca 127.0.0.1
zgodnie z oczekiwaniami. Ponadto ten sam kod działa doskonale we FreeBSD. Czy jest coś specjalnego w OpenSolaris, czego nie jestem świadomy?
Doceniam wszelkie wskazówki, dzięki.
źródło
127.0.0.1 localhost <hostname>
mi wystarczałohostname
polecenia z terminala.Używam
NetworkInterface.getNetworkInterfaces()
jako odwrotu, gdyInetAddress.getLocalHost()
rzucaUnknownHostException
. Oto kod (bez obsługi wyjątków dla przejrzystości).Enumeration<NetworkInterface> iterNetwork; Enumeration<InetAddress> iterAddress; NetworkInterface network; InetAddress address; iterNetwork = NetworkInterface.getNetworkInterfaces(); while (iterNetwork.hasMoreElements()) { network = iterNetwork.nextElement(); if (!network.isUp()) continue; if (network.isLoopback()) continue; iterAddress = network.getInetAddresses(); while (iterAddress.hasMoreElements()) { address = iterAddress.nextElement(); if (address.isAnyLocalAddress()) continue; if (address.isLoopbackAddress()) continue; if (address.isMulticastAddress()) continue; return address.getHostAddress(); } }
Inne odpowiedzi edytują
/etc/hosts
plik. Jest to podatne na błędy, kruche, może wymagać dostępu do roota i nie będzie działać na wszystkich systemach operacyjnych.źródło
Na mojej instancji amazon miałem ten sam problem, był problem z domyślną konfiguracją DNS. Aby rozwiązać problem, wykonałem następujące kroki -
$hostname ip-10-122-16-169
$ping ip-10-122-16-169 ping: unknown host ip-10-122-16-169
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ip-10-122-16-169 ::1 localhost6 localhost6.localdomain6
$ping ip-10-122-16-169 PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=255 time=0.018 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=255 time=0.024 ms
źródło
Wyszukiwanie hostów w Solarisie używa
/etc/nsswitch.conf
więc w zależności od tego, co w wierszu „hosts:” mówi, że określa/etc/hosts
, czy należy skonsultować się z NIS, DNS i / lub LDAP.Jeśli używasz tylko hostów i DNS, powinieneś mieć to w
/etc/nsswitch.conf
:Powód
nslookup desvearth01
działa, ponieważnslookup
polecenie bezpośrednio konsultuje się/etc/resolv.conf
. Jeśli chcesz zrobić lepszy test wiersza poleceń, użyj polecenia:źródło
Ten błąd pojawia się, gdy zmieniłem nazwę stacji roboczej i próbowałem uruchomić Glassfish 2. Musisz także zmienić nazwę wpisu w / etc / hosts, na przykład:
127.0.0.1 localhost 127.0.1.1 MyNewName
źródło
Zamówienie / etc / hostname następnie umieścić swoją nazwę hosta do pliku hosts.
źródło
Jeśli widzisz ten komunikat, ustaw nazwę hosta ZA POMOCĄ
hostname superhost.domain
POLECENIA !Następnie sprawdź, który
/etc/hosts
plik zawiera taki ciąg127.0.0.1 localhost
.Sprawdź także, czy polecenie
uname -a
zwraca coś takiego:NIE TAK JAK TO!!!!
źródło
Inna opcja jest w tym poście (w rzeczywistości to, co znajduje się w twoim / etc / sysconfig / pliku sieciowym dla twojej nazwy hosta ... zmieniając ją na nazwę FQDN, rozwiązuje ten problem).
java getLocalHost () UnknownHostException / etc / hosts plik różni się od linux API?
źródło
Mam też problemy z tym związane. Muszę przeprowadzić dalsze testy, ale wygląda na to, że
NetworkInterface.getNetworkInterfaces()
mogą być bardziej wiarygodne. Myślę, że to nie wyszukuje, ale po prostu pobiera adres IP.Używam go jako „następnego najlepszego”, gdy
getLocalHost()
zawodzi.źródło