Beheben von Ausnahmefehlern in einer NETCONF-Java-Anwendung
In den folgenden Abschnitten werden Ausnahmefehler beschrieben, die beim Ausführen eines NETCONF-Java-Toolkit-Programms auftreten können. In diesen Abschnitten werden auch mögliche Ursachen und Lösungen für jeden Fehler vorgestellt.
Fehlerbehebung bei Verbindungsfehlern: Zeitüberschreitung des Sockets
Problem
Beschreibung
Eine NETCONF-Ausnahme tritt auf, und die folgende Fehlermeldung wird angezeigt:
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)
Ursache
Mögliche Ursachen für den Socket-Timeout-Fehler sind:
Das Gerät oder die Schnittstelle, mit der Sie eine Verbindung herstellen, ist ausgefallen oder nicht verfügbar.
Die IP-Adresse oder der Hostname in den Argumenten für das
Device
Objekt ist falsch.Der Wert für das Verbindungstimeout wurde überschritten, bevor die Verbindung hergestellt wurde.
Lösung
Stellen Sie sicher, dass das Gerät betriebsbereit ist. Überprüfen Sie außerdem, ob die IP-Adresse oder der Hostname in den Argumenten des Device
Konstruktors im Programmcode korrekt ist.
Der Standardwert für die Zeitüberschreitung beim Herstellen einer Verbindung mit einem Gerät beträgt 5000 Millisekunden. Um den Timeoutwert auf ein größeres Intervall festzulegen, um sicherzustellen, dass das Programm genügend Zeit zum Herstellen der Verbindung hat, rufen Sie die setTimeOut()
Methode für das Geräteobjekt auf. Mit dem folgenden Code wird das Timeoutintervall auf 10 Sekunden festgelegt:
Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.setTimeOut(10000); device.connect();
Fehlerbehebung bei Verbindungsfehlern: Keine Verbindung
Problem
Beschreibung
Eine IllegalStateException-Ausnahme tritt auf, und die folgende Fehlermeldung wird angezeigt:
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)
Ursache
Mit dem Remotegerät wurde keine SSHv2-Verbindung oder NETCONF-Sitzung hergestellt.
Lösung
Rufen Sie die connect()
Methode für das Geräteobjekt auf, um eine SSHv2-Verbindung und eine Standard-NETCONF-Sitzung mit dem Gerät herzustellen, auf dem der NETCONF-Server ausgeführt wird. Sobald die Verbindung und die Sitzung hergestellt sind, sollte die RPC-Ausführung erfolgreich sein.
Fehlerbehebung bei Authentifizierungsfehlern
Problem
Beschreibung
Eine NETCONF-Ausnahme tritt auf, und die folgende Fehlermeldung wird angezeigt:
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.
Ursache
Eine Fehlermeldung für eine fehlgeschlagene Authentifizierung kann mehrere mögliche Ursachen haben, einschließlich der folgenden:
Die Host- oder Authentifizierungsdetails, die als Argumente an den
Device
Konstruktor übergeben werden, sind falsch im Programmcode eingegeben.Die Argumente für das
Device
Objekt sind korrekt, aber auf dem Gerät, mit dem Sie eine Verbindung herstellen, wurde kein entsprechendes Benutzerkonto erstellt.
Lösung
Wenn auf dem Gerät, mit dem Sie eine Verbindung herstellen, kein Benutzerkonto vorhanden ist, erstellen Sie das Konto mit der entsprechenden Authentifizierung. Weitere Informationen zum Konfigurieren von Benutzerkonten auf einem Gerät, auf dem Junos OS ausgeführt wird, finden Sie im Junos OS-Benutzerzugriffs- und Authentifizierungsbenutzerhandbuch für Routing-Geräte .
Wenn das Benutzerkonto auf dem Remotegerät vorhanden ist, aber die Argumente für den Device
Konstruktor falsch im Programmcode eingegeben wurden, korrigieren Sie die Argumente, und kompilieren Sie das Programm neu.
Fehlerbehebung bei NETCONF-Sitzungsfehlern
Problem
Beschreibung
Eine NETCONF-Ausnahme tritt auf, und die folgende Fehlermeldung wird angezeigt:
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)
Ursache
NETCONF über SSH ist möglicherweise nicht auf dem Gerät aktiviert, auf dem sich der NETCONF-Server befindet, oder es ist möglicherweise auf einem anderen Port aktiviert.
Lösung
Stellen Sie sicher, dass Sie NETCONF über SSH auf dem Gerät aktiviert haben, auf dem sich der NETCONF-Server befindet. Wenn Ihr NETCONF-Java-Toolkit-Programm keine bestimmte Portnummer in den Device
Argumenten angibt, wird die NETCONF-Sitzung auf dem Standard-NETCONF-over-SSH-Port 830 eingerichtet. Um zu überprüfen, ob NETCONF über SSH auf dem Standardport für ein Gerät mit Junos OS aktiviert ist, geben Sie den folgenden Betriebsmodusbefehl auf dem Remotegerät ein:
user@host> show configuration system services ftp; netconf { ssh; }
Wenn die netconf
Konfigurationshierarchie nicht vorhanden ist, geben Sie im Konfigurationsmodus die folgenden Anweisungen aus, um NETCONF über SSH auf dem Standardport zu aktivieren:
[edit] user@host# set system services netconf ssh user@host# commit
Wenn die netconf
Konfigurationshierarchie einen anderen Port als den Standardport angibt, sollten Sie die neue Portnummer in die Device
Objektkonstruktorargumente aufnehmen. Beispielsweise ist das folgende Gerät für NETCONF über SSH an Port 12345 konfiguriert:
user@host> show configuration system services netconf { ssh { port 12345; } }
Um das Verbindungsproblem zu beheben, fügen Sie die neue Portnummer in die Device
Argumente ein.
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 12345);