Estoy probando nuestra aplicación de servidor (Java escrito) en diferentes sistemas operativos y pensé que OpenSolaris (2008.11) sería el menos problemático debido a la buena integración de Java. Resulta que estaba equivocado, ya que termino con una UnknownHostException
try {
computerName = InetAddress.getLocalHost().getHostName();
if (computerName.indexOf(".") > -1)
computerName = computerName.substring(0,
computerName.indexOf(".")).toUpperCase();
} catch (UnknownHostException e) {
e.printStackTrace();
}
La salida es:
java.net.UnknownHostException: desvearth01: desvearth01
at java.net.InetAddress.getLocalHost(InetAddress.java:1353)
Sin embargo, nslookup desvearth01
devuelve la dirección IP correcta y nslookup localhost
vuelve 127.0.0.1
como se esperaba. Además, el mismo código funciona perfectamente en FreeBSD. ¿Hay algo especial en OpenSolaris que yo no sepa?
Cualquier sugerencia apreciada, gracias.
fuente
127.0.0.1 localhost <hostname>
fue suficiente para míhostname
comando de la terminal.Lo uso
NetworkInterface.getNetworkInterfaces()
como respaldo para cuandoInetAddress.getLocalHost()
lanza unUnknownHostException
. Aquí está el código (sin manejo de excepciones para mayor claridad).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(); } }
Otras respuestas editan el
/etc/hosts
archivo. Esto es propenso a errores, frágil, puede requerir acceso de root y no funcionará en todos los sistemas operativos.fuente
En mi instancia de Amazon, tenía el mismo problema, había un problema de configuración de DNS predeterminado. Entonces, para solucionar el problema, hice estos pasos:
$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
fuente
Las búsquedas de host en Solaris lo usan,
/etc/nsswitch.conf
dependiendo de lo que dice la línea 'hosts:', determina si se/etc/hosts
debe consultar NIS, DNS y / o LDAP.Si solo usa hosts y DNS, debe tener esto en
/etc/nsswitch.conf
:La razón
nslookup desvearth01
funciona es porque elnslookup
comando consulta directamente/etc/resolv.conf
. Si desea hacer una mejor prueba de línea de comandos, use el comando:fuente
Este error aparece cuando cambié el nombre de la estación de trabajo e intenté iniciar Glassfish 2. También debe cambiar el nombre de la entrada en / etc / hosts, algo como esto:
127.0.0.1 localhost 127.0.1.1 MyNewName
fuente
Verifique / etc / hostname y luego coloque su nombre de host en el archivo hosts.
fuente
Si ve este mensaje, entonces necesita establecer el nombre de host CON
hostname superhost.domain
COMMAND !Después de esto, verifique qué
/etc/hosts
archivo contiene una cadena como esta127.0.0.1 localhost
.Además, verifique que el comando
uname -a
devuelva algo como esto:¡¡¡¡ASÍ NO!!!!
fuente
Otra opción está en esta publicación (de hecho, lo que está en su archivo / etc / sysconfig / network para su nombre de host ... al cambiarlo a un nombre FQDN soluciona este problema).
java getLocalHost () UnknownHostException / etc / hosts ¿el archivo difiere de la api de linux?
fuente
También estoy teniendo problemas con esto. Necesito hacer más pruebas, pero parece que
NetworkInterface.getNetworkInterfaces()
puede ser más confiable. Creo que esto no hace la búsqueda, solo toma la IP.Lo estoy usando como el 'siguiente mejor' cuando
getLocalHost()
falla.fuente