NETCONF Java Toolkit-Klassen
ZUSAMMENFASSUNG NETCONF Java Toolkit-Klassen, die in Den Versionen 1.0.1 und früher unterstützt werden.
NETCONF Java Toolkit-Klasse: Gerät
Ein net.juniper.netconf.Device
Objekt stellt eine SSHv2-Verbindung und eine Standard-NETCONF-Sitzung zwischen dem Konfigurationsverwaltungsserver und dem Gerät, auf dem sich der NETCONF-Server befindet, dar.
Beim Erstellen eines Device
Objekts müssen Sie die IP-Adresse oder den Hostnamen sowie die Authentifizierungsdetails angeben, um die SSHv2-Verbindung zu erstellen. Die Authentifizierung kann auf Benutzerpasswörtern oder RSA/DSA-Schlüssel basieren. Sie haben auch die Möglichkeit, die Portnummer für die SSHv2-Verbindung und die Client-Funktionen anzugeben, die an den NETCONF-Server gesendet werden sollen.
Die Konstruktoryntax lautet:
Device (String hostname, String login, String password, String pemKeyFile) Device (String hostname, String login, String password, String pemKeyFile, int port) Device (String hostname, String login, String password, String pemKeyFile, ArrayList capabilities) Device (String hostname, String login, String password, String pemKeyFile, int port, ArrayList capabilities)
Die Konstruktorparameter sind:
hostname
—(Erforderlich) IP-Adresse oder Hostname des Geräts, auf dem der NETCONF-Server ausgeführt wird und zu dem eine Verbindung über SSHv2 hergestellt werden soll.login
—(Erforderlich) Benutzername für das Anmeldekonto auf dem Gerät, auf dem der NETCONF-Server ausgeführt wird.password
—(Erforderliches) Kennwort für benutzerpasswortbasierte oder schlüsselbasierte Authentifizierung. Wenn für die schlüsselbasierte Authentifizierung kein Kennwort erforderlich ist, übergeben Sie dieses Argument als null.pemKeyFile
—(Erforderlich) Pfad der Datei, die den privaten DSA/RSA-Schlüssel im PEM-Format für schlüsselbasierte Authentifizierung enthält. Für benutzerkennwortbasierte Authentifizierung übergeben Sie dieses Argument als null.port
—(Optional) Portnummer zum Herstellen der SSHv2-Verbindung. Der Standardport ist 830. Wenn Sie eine Verbindung zu einem Gerät herstellen, das für NETCONF über SSH auf einem anderen Port als dem Standardport konfiguriert ist, müssen Sie diese Portnummer in den Argumenten angeben.capabilities
—(Optional) Client-Funktionen, die an den NETCONF-Server kommuniziert werden, wenn die Funktionen nicht die Standardfunktionen sind.Die an den NETCONF-Server gesendeten Standardfunktionen sind:
urn:ietf:params:xml:ns:netconf:base:1.0 urn:ietf:params:xml:ns:netconf:base:1.0#candidate urn:ietf:params:xml:ns:netconf:base:1.0#confirmed-commit urn:ietf:params:xml:ns:netconf:base:1.0#validate urn:ietf:params:xml:ns:netconf:base:1.0#url?protocol=http,ftp,file
Die allgemeine Syntax für das Erstellen eines Device
Objekts lautet:
Device device_name = new Device (String hostname, String login, String password, String pemKeyFile, <int port>, <ArrayList capabilities>)
Standardmäßig wird ein NetconfSession
Objekt erstellt, wenn Sie eine neue Instanz von und eine Device
Verbindung mit einem NETCONF-Server herstellen. Sobald Sie ein Device
Objekt erstellt haben, können Sie NETCONF-Operationen ausführen.
Beispiele
Im folgenden Beispiel wird ein Device
Objekt mit einer authentifizierten SSHv2-Verbindung zur IP-Adresse 10.10.1.1 erstellt. Die Verbindung verwendet benutzerpasswortbasierte Authentifizierung mit dem Anmeldenamen "admin" und dem Passwort "PaSsWoRd". Wenn die connect()
Methode aufgerufen wird, verbindet sie sich mit dem Gerät und richtet automatisch eine Standard-NETCONF-Sitzung ein.
Device my_device = new Device("10.10.1.1", "admin", "PaSsWoRd", null); my_device.connect();
Um ein Device
Objekt mit einer NETCONF-over-SSH-Verbindung an Port 49000 anstelle des Standardports 830 zu erstellen, fügen Sie die Portnummer zu den Konstruktorargumenten hinzu.
Device my_device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 49000);
Der Standard-Timeoutwert für die Verbindung mit dem Gerät beträgt 5000 Millisekunden. Rufen setTimeOut()
Sie die Methode für das Geräteobjekt auf, um den Timeoutwert auf ein anderes Intervall festzulegen.
NETCONF Java Toolkit Class: NetconfSession
Ein net.juniper.netconf.NetconfSession
Objekt stellt die NETCONF-Sitzung zwischen dem Konfigurationsverwaltungsserver und dem Gerät dar, auf dem sich der NETCONF-Server befindet.
Standardmäßig wird eine NETCONF-Sitzung erstellt, wenn Sie eine neue Instanz von Device
und eine Verbindung mit einem NETCONF-Server herstellen, sodass Sie kein explizites NetconfSession
Objekt erstellen müssen. Sie können die NETCONF-Vorgänge direkt aus dem Device
Objekt ausführen, indem Sie die zugehörigen Methoden aufrufen.
Es kann jedoch Zeiten geben, in denen Sie mehrere NETCONF-Sitzungen auf derselben SSHv2-Verbindung benötigen. Um mehrere Sitzungen zu erstellen, rufen Sie die createNetconfSession()
Methode für das Device
Objekt auf, wie im folgenden Beispiel dargestellt:
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null); device.connect(); NetconfSession second_session = device.createNetconfSession();
Sobald Sie eine zusätzliche NETCONF-Sitzung erstellt haben, rufen Sie die NETCONF-Vorgangsmethoden für das neue NetconfSession
Objekt auf die gleiche Weise auf, wie Sie sie für das Device
Objekt aufrufen.
Die Device
Klassen und NetconfSession
Klassen enthalten viele identische Methoden, die NETCONF-Vorgänge ausführen, z. B. die Ausführung von Remote-Prozeduraufrufen (RPCs) und das Durchführen von Konfigurationsänderungen. Wenn Sie eine Methode für das Device
Objekt aufrufen, wirkt sie auf die Standard-NETCONF-Sitzung. Wenn Sie eine Methode für ein zusätzliches NetconfSession
Objekt aufrufen, wirkt sie auf diese NETCONF-Sitzung.
Beispiel: Erstellen mehrerer NETCONF-Sitzungen
Im folgenden Beispiel erstellt der Codeausschnitt ein neues Device
Objekt. Wenn die connect()
Methode aufgerufen wird, verbindet sich das Programm mit dem Remotegerät und richtet eine Standard-NETCONF-Sitzung ein. Das Programm erstellt ein zweites NetconfSession
Objekt, second_session
. Der Aufruf device.getSessionID()
gibt die Sitzungs-ID der Standard-NETCONF-Sitzung zurück, und der Aufruf second_session.getSessionID()
gibt die Sitzungs-ID der zweiten NETCONF-Sitzung zurück.
// Create a device object and a default NETCONF session Device device = new Device("10.10.1.34", "admin", "PaSsWoRd", null); device.connect(); // Create an additional NETCONF session NetconfSession second_session = device.createNetconfSession(); // There are two independent NETCONF sessions String default_session_id = device.getSessionID(); String second_session_id = second_session.getSessionID();
NETCONF Java Toolkit-Klasse: XML
Ein net.juniper.netconf.XML
Objekt repräsentiert XML-kodierte Daten und stellt Methoden zum Ändern und Analysieren von XML bereit. Das XML-Objekt behält intern ein org.w3c.dom.Document
Objekt, das den XML-Daten entspricht, die es darstellt.
Es wird empfohlen, mit dem XML-Objekt zu arbeiten, um neue Konfigurationen, Remoteprozeduraufrufe (RPCs) oder XML-basierte Daten zu erstellen. Mithilfe eines XML-Objekts können Sie ganz einfach Elemente und Attribute hinzufügen, löschen oder ändern. Um die Änderung von XML-Inhalten zu erleichtern, behält das XML-Objekt ein "aktives" Element bei, das die für die Änderung bereitgestellte Hierarchieebene darstellt.
Um ein XML-Objekt zu erstellen, erstellen Sie zunächst ein XMLBuilder
Objekt und erstellen die anfängliche XML-Hierarchie. Die XMLBuilder
Methoden geben ein XML-Objekt zurück, auf dem Sie dann erstellen können. Dadurch ist es bequem, XML-basierte Konfigurationen und RPCs zu erstellen und auch die vom NETCONF-Server empfangenen XML-basierten Antworten zu analysieren.
Beispiel: Erstellen einer Konfigurationshierarchie
In diesem Beispiel wird die folgende XML-Konfigurationshierarchie erstellt. Die zum Erstellen der Konfigurationshierarchie verwendeten Schritte sind in Tabelle 1 dargestellt.
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <source-address>any</source-address> <destination-address>any</destinationaddress> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> </match> <then> <permit> </permit> </then> </policy> </policy> </policies> </security> </configuration>
Java-Code |
Daraus resultierende Hierarchie |
---|---|
Erstellen eines XMLBuilder-Objekts und einer Hierarchie auf 3 EbenenXMLBuilder builder = new XMLBuilder();XML policy = builder.createNewConfig("security","policies","policy"); |
<configuration> <security> <policies> <policy> </policy> </policies> </security> </configuration> |
Anfügen von Knoten auf "Richtlinien"-Ebene policy.append("from-zone-name","trust"); policy.append("to-zone-name","untrust"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> </policy> </policies> </security> </configuration> |
Erstellen einer neuen Hierarchieebene für die erste Richtlinie XML policyOne = policy.append("policy");policyOne.append("name","my-sec-policy"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> </policy> </policy> </policies> </security> </configuration> |
Erstellen Sie die "Match"-Hierarchie XML match = policyOne.append("match"); // Erstellen und fügen Sie ein Anwendungs-Array an // an, um drei Knoten mit demselben Knotennamen String[] applications = {"junos-ftp","junos-ntp","junos-ssh"};zu erstellen match.append("application", applications); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> </match> </policy> </policy> </policies> </security> </configuration> |
Hinzufügen von Elementen unter "Übereinstimmung" match.append("source-address","any");match.append("destination-address","any"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address> any </destination-address> </match> </policy> </policy> </policies> </security> </configuration> |
Hinzufügen der "dann"-Hierarchie mit einem untergeordneten "permit"-Element policyOne.append("then").append("permit"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address> any </destination-address> </match> <then> <permit/> </then> </policy> </policy> </policies> </security> </configuration> |
Vollständiger Code und endgültige Konfiguration XMLBuilder builder = new XMLBuilder(); XML policy = builder.createNewConfig("security","policies","policy"); policy.append("from-zone-name","trust"); policy.append("to-zone-name","untrust"); XML policyOne = policy.append("policy"); policyOne.append("name","my-sec-policy"); XML match = policyOne.append("match"); String[] applications = {"junos-ftp","junos-ntp","junos-ssh"}; match.append("application", applications); match.append("source-address","any"); match.append("destination-address","any"); policyOne.append("then").append("permit"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address>any </destination-address> </match> <then> <permit/> </then> </policy> </policy> </policies> </security> </configuration> |
NETCONF Java Toolkit-Klasse: XMLBuilder
In einer NETCONF-Sitzung erfolgt die Kommunikation zwischen dem Konfigurationsverwaltungsserver und dem NETCONF-Server über XML-kodierte Daten. Der Konfigurationsverwaltungsserver sendet Remote Procedure Calls (RPCs) an den NETCONF-Server, und der NETCONF-Server verarbeitet den RPC und gibt eine RPC-Antwort zurück. Die net.juniper.netconf.XMLBuilder
Objekte und net.juniper.netconf.XML
Objekte helfen beim Erstellen und Analysieren von XML-kodierten Daten.
Sie verwenden das XMLBuilder-Objekt, um ein neues XML-Objekt zu erstellen. Die Konstruktoryntax lautet:
XMLBuilder ()
Die XMLBuilder-Klasse enthält Methoden zum Erstellen einer Konfigurationshierarchie, eines RPC oder eines XML-Objekts als XML-kodierte Daten. Jede Methode ist überlastet, um mehrere Hierarchieebenen zu akzeptieren. Die Methoden geben ein XML-Objekt zurück. Die Methoden zum Erstellen einer Konfiguration, eines RPC- oder XML-Objekts mit einer einschichtigen Hierarchie sind beispielsweise:
createNewConfig(String elementLevelOne)
createNewRPC(String elementLevelOne)
createNewXML(String elementLevelOne)
Der folgende Beispielcode erstellt ein neues XMLBuilder
Objekt, builder
. Das XMLBuilder
Objekt ruft die createNewConfig()
Methode auf, um eine dreistufige Konfigurationshierarchie zu erstellen, die aus einem "Security"-Element, einem untergeordneten "Policies"-Element und einem "Policy"-Element besteht, das ein untergeordnetes Element von "policies" ist.
XMLBuilder builder = new XMLBuilder(); XML policy = builder.createNewConfig("security","policies","policy");
Die resultierende XML-Hierarchie lautet wie folgt.
<configuration> <security> <policies> <policy> </policy> </policies> </security> </configuration>
Beachten Sie, dass die createNewConfig()
Methode die Hierarchie immer innerhalb eines Stammelements <configuration>
auf der obersten Ebene umschließt. Ebenso schließt die createNewRPC()
Methode die Hierarchie in ein Tag-Element ein <rpc>
.
Sobald Sie ein XML-Objekt generiert haben, können Sie Methoden aus der XML
Klasse aufrufen, um dieses Objekt zu bearbeiten.