Solucionar problemas de errores de excepción en una aplicación JAVA NETCONF
En las siguientes secciones, se describen los errores de excepción que puede encontrar al ejecutar un programa de kit de herramientas Java de NETCONF. Estas secciones también presentan posibles causas y soluciones para cada error.
Solución de problemas de errores de conexión: Socket con tiempo de salida
Problema
Descripción
Se produce una excepción de NETCONF y verá el siguiente mensaje de error:
Exception in thread "main" net.juniper.netconf.NetconfException: The connect() operation on the socket timed out. at net.juniper.netconf.Device.createNetconfSession(Device.java:344) at net.juniper.netconf.Device.connect(Device.java:225) at GetChassisInventory.main(GetChassisInventory.java:14)
Causa
Las posibles causas del error de tiempo de espera del socket incluyen:
El dispositivo o la interfaz a la que se está conectando están inactivos o no están disponibles.
La dirección IP o el nombre de host en los argumentos del
Device
objeto es incorrecto.El valor del tiempo de espera de la conexión se superó antes de establecer la conexión.
Solución
Asegúrese de que el dispositivo esté funcionando. También compruebe que la dirección IP o el nombre de host sean correctos en los argumentos del Device
constructor en el código de programa.
El valor predeterminado de tiempo de espera para conectarse a un dispositivo es de 5000 milisegundos. Para establecer el valor de tiempo de espera en un intervalo mayor para asegurarse de que el programa tenga tiempo suficiente para establecer la conexión, llame al setTimeOut()
método en el objeto de dispositivo. El código siguiente establece el intervalo de tiempo de espera en 10 segundos:
Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.setTimeOut(10000); device.connect();
Solución de problemas de errores de conexión: sin conexión
Problema
Descripción
Se produce una excepción IlegalStateException y verá el siguiente mensaje de error:
Exception in thread "main" java.lang.IllegalStateException: Cannot execute RPC, you need to establish a connection first. at net.juniper.netconf.Device.executeRPC(Device.java:498) at GetChassisInventoryRun.main(GetChassisInventoryRun.java:15)
Causa
No se estableció una conexión SSHv2 o sesión NETCONF con el dispositivo remoto.
Solución
Llame al connect()
método en el objeto de dispositivo para establecer una conexión SSHv2 y una sesión NETCONF predeterminada con el dispositivo en el que se ejecuta el servidor NETCONF. Una vez que se establecen la conexión y la sesión, la ejecución de RPC debe ser correcta.
Solución de problemas de errores de autenticación
Problema
Descripción
Se produce una excepción de NETCONF y verá el siguiente mensaje de error:
Exception in thread "main" net.juniper.netconf.NetconfException: Authentication failed. at net.juniper.netconf.Device.createNetconfSession(Device.java:358) at net.juniper.netconf.Device.connect(Device.java:225) at GetChassisInventory.main(GetChassisInventory.java:14) <!-- or --> Could not connect to device:Authentication failed.
Causa
Un mensaje de error para la autenticación fallida podría tener varias causas posibles, incluidas las siguientes:
Los detalles de host o autenticación pasados como argumentos al
Device
constructor se introducen incorrectamente en el código de programa.Los argumentos del
Device
objeto son correctos, pero no se ha creado ninguna cuenta de usuario correspondiente en el dispositivo al que se está conectando.
Solución
Si no hay ninguna cuenta de usuario en el dispositivo al que se está conectando, cree la cuenta con la autenticación adecuada. Para obtener más información acerca de cómo configurar cuentas de usuario en un dispositivo que ejecuta Junos OS, consulte la Guía del usuario de autenticación y acceso de usuario de Junos OS para dispositivos de enrutamiento .
Si la cuenta de usuario existe en el dispositivo remoto, pero los argumentos del Device
constructor se ingresan incorrectamente en el código de programa, corrija los argumentos y vuelva a compilar el programa.
Solución de problemas de errores de sesión de NETCONF
Problema
Descripción
Se produce una excepción de NETCONF y verá el siguiente mensaje de error:
Exception in thread "main" net.juniper.netconf.NetconfException: There was a problem while connecting to 10.10.1.1:830 at net.juniper.netconf.Device.createNetconfSession(Device.java:344) at net.juniper.netconf.Device.connect(Device.java:225) at GetChassisInventory.main(GetChassisInventory.java:14)
Causa
Es posible que NETCONF a través de SSH no se active en el dispositivo donde reside el servidor NETCONF o que esté habilitado en un puerto diferente.
Solución
Asegúrese de que ha habilitado NETCONF mediante SSH en el dispositivo donde reside el servidor NETCONF. Si el programa de kit de herramientas Java de NETCONF no especifica un número de puerto específico en los Device
argurments, la sesión NETCONF se establece en el puerto predeterminado NETCONF-over-SSH, 830. Para comprobar si NETCONF a través de SSH está habilitado en el puerto predeterminado para un dispositivo que ejecuta Junos OS, escriba el siguiente comando de modo operativo en el dispositivo remoto:
user@host> show configuration system services ftp; netconf { ssh; }
Si la netconf
jerarquía de configuración no está, emita las siguientes instrucciones en modo de configuración para habilitar NETCONF sobre SSH en el puerto predeterminado:
[edit] user@host# set system services netconf ssh user@host# commit
Si la netconf
jerarquía de configuración especifica un puerto distinto del puerto predeterminado, debe incluir el nuevo número de puerto en los argumentos del Device
constructor de objetos. Por ejemplo, el siguiente dispositivo está configurado para NETCONF a través de SSH en el puerto 12345:
user@host> show configuration system services netconf { ssh { port 12345; } }
Para corregir el problema de conexión, incluya el nuevo número de puerto en los Device
argumentos.
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 12345);