Я тестирую наше серверное приложение (написанное на Java) в разных операционных системах и подумал, что OpenSolaris (2008.11) будет наименее проблематичным из-за хорошей интеграции Java. Оказывается, я ошибался, так как в итоге получилось исключение UnknownHostException
try {
computerName = InetAddress.getLocalHost().getHostName();
if (computerName.indexOf(".") > -1)
computerName = computerName.substring(0,
computerName.indexOf(".")).toUpperCase();
} catch (UnknownHostException e) {
e.printStackTrace();
}
Результат:
java.net.UnknownHostException: desvearth01: desvearth01
at java.net.InetAddress.getLocalHost(InetAddress.java:1353)
Однако nslookup desvearth01
возвращает правильный IP-адрес и nslookup localhost
возвращает 127.0.0.1
ожидаемый результат. Кроме того, тот же код отлично работает во FreeBSD. Есть ли в OpenSolaris что-то особенное, о чем я не знаю?
Любые подсказки приветствуются, спасибо.
источник
127.0.0.1 localhost <hostname>
было достаточно для меняhostname
команду из терминала.Я использую
NetworkInterface.getNetworkInterfaces()
какInetAddress.getLocalHost()
запасной вариант, когда бросаетUnknownHostException
. Вот код (без обработки исключений для ясности).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(); } }
Другие ответы редактируют
/etc/hosts
файл. Это подвержено ошибкам, нестабильно, может потребовать root-доступа и не будет работать на всех ОС.источник
На моем экземпляре Amazon у меня была такая же проблема, была проблема с конфигурацией DNS по умолчанию. Итак, чтобы решить проблему, я сделал следующие шаги -
$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
источник
Поиск хостов в Solaris использует
/etc/nsswitch.conf
так, в зависимости от того, что написано в строке «hosts:», он определяет/etc/hosts
, следует ли обращаться к NIS, DNS и / или LDAP.Если вы используете только хосты и DNS, вы должны иметь это в
/etc/nsswitch.conf
:Причина
nslookup desvearth01
работы в том, чтоnslookup
команда обращается напрямую/etc/resolv.conf
. Если вы хотите улучшить тест командной строки, используйте команду:источник
Эта ошибка появляется, когда я изменил имя рабочей станции и попробовал запустить Glassfish 2. Вы также должны переименовать запись в / etc / hosts, примерно так:
127.0.0.1 localhost 127.0.1.1 MyNewName
источник
Проверьте / etc / hostname, затем поместите свое имя хоста в файл hosts.
источник
Если вы видите это сообщение, вам нужно установить имя хоста С
hostname superhost.domain
КОМАНДОЙ !После этого проверьте, какой
/etc/hosts
файл содержит такую строку127.0.0.1 localhost
.Также убедитесь, что команда
uname -a
возвращает что-то вроде этого:НЕ ТАК!!!!
источник
Другой вариант находится в этом сообщении (фактически, то, что находится в вашем файле / etc / sysconfig / network для вашего имени хоста ... путем изменения его на имя FQDN, эта проблема устраняется).
java getLocalHost () UnknownHostException / etc / hosts файл отличается от linux api?
источник
У меня тоже есть проблемы с этим. Мне нужно провести дополнительное тестирование, но похоже, что это
NetworkInterface.getNetworkInterfaces()
может быть более надежным. Я думаю, что это не поиск, а просто захват IP.Я использую его как «лучший вариант», когда
getLocalHost()
терпит неудачу.источник