java - objetivo - solaris que es
InetAddress.getLocalHost() arroja UnknownHostException (9)
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 agradable integración de Java. Resulta que estaba equivocado, ya que termino con UnknownHostException
try {
computerName = InetAddress.getLocalHost().getHostName();
if (computerName.indexOf(".") > -1)
computerName = computerName.substring(0,
computerName.indexOf(".")).toUpperCase();
} catch (UnknownHostException e) {
e.printStackTrace();
}
El resultado 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
devuelve 127.0.0.1
como se esperaba. Además, el mismo código funciona perfectamente en FreeBSD. ¿Hay algo especial para OpenSolaris del que no tenga conocimiento?
Cualquier pista apreciada, gracias.
Checkout / etc / hostname luego ponga su nombre de host en el archivo hosts.
En buena tradición, puedo responder mi propia pregunta una vez más:
Parece que InetAddress.getLocalHost()
ignora /etc/resolv.conf, pero solo mira el archivo / etc / hosts (donde no había especificado nada además de localhost). Agregar la IP y el nombre de host a este archivo resuelve el problema y la excepción ya no existe.
La respuesta anterior es casi correcta y recibí sugerencias desde arriba y mi problema se resuelve ... Gracias.
Pero para mejorar esto, estoy agregando cambios paso a paso, para que sea útil incluso para usuarios ingenuos.
Pasos:
Abra / etc / hosts, las entradas pueden verse a continuación.
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
necesita agregar una línea más arriba de esto por cualquier editor como vi o gedit.
<your-machine-ip> <your-machine-name> localhost
ej.192.168.1.73 my_foo localhost
Ahora, el archivo general puede verse así:
192.168.1.73 my_foo localhost
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- Solo guárdalo y ejecuta nuevamente tu código java ... tu trabajo está hecho.
En mi instancia de Amazon estaba teniendo el mismo problema, había un problema de configuración de DNS predeterminado. Entonces, para solucionar el problema, hice estos pasos:
obtener su nombre de host
$hostname
ip-10-122-16-169
ping al nombre de host
$ping ip-10-122-16-169
ping: unknown host ip-10-122-16-169
cat / etc / hosts , obtendrás algo así como
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost6 localhost6.localdomain6
ahora solo necesitas agregar tu nombre de host al final de la primera línea, así que cuando lo anexes se verá como
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ip-10-122-16-169
::1 localhost6 localhost6.localdomain6
ahora está listo para ir, para verificar nuevamente el mismo nombre de host
$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
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
Las búsquedas de host en Solaris usan /etc/nsswitch.conf
modo que, dependiendo de lo que /etc/nsswitch.conf
la línea ''hosts:'', determina si se debe consultar /etc/hosts
, NIS, DNS y / o LDAP.
Si solo usa hosts y DNS, debe tener esto en /etc/nsswitch.conf
:
hosts: files dns
La razón por la cual nslookup desvearth01
funciona es porque el comando nslookup
consulta directamente /etc/resolv.conf
. Si desea hacer una mejor prueba de línea de comando, use el comando:
getent hosts desvearth01
Otra opción es 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 de FQDN corrige este problema).
java getLocalHost () UnknownHostException / etc / hosts difiere de Linux api?
Si ve este mensaje, necesita configurar el nombre de host WITH hostname superhost.domain
COMMAND !
Después de esto, verifique qué /etc/hosts
contiene cadenas como esta 127.0.0.1 localhost
.
Además, verifique que el comando uname -a
devuelva algo como esto:
Linux superhost.domain 2.6.38-8-server # 42-Ubuntu SMP Lun Abr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU / Linux
¡¡¡¡ASÍ NO!!!!
Linux (ninguno) 2.6.38-8-server # 42-Ubuntu SMP Lun Abr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU / Linux
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, sino que simplemente capta la IP.
Lo estoy usando como el "siguiente mejor" cuando falla getLocalHost()
.
Uso NetworkInterface.getNetworkInterfaces()
como un retroceso para cuando InetAddress.getLocalHost()
arroja una UnknownHostException
. Aquí está el código (sin manejo de excepción 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()) // If I want loopback, I would use "localhost" or "127.0.0.1".
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());
}
}