Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

NETCONF Java 工具包课程

总结 版本 1.0.1 和更低版本中支持的 NETCONF Java Toolkit 类。

NETCONF Java Toolkit 类:设备

对象 net.juniper.netconf.Device 表示配置管理服务器与 NETCONF 服务器所在的设备之间的 SSHv2 连接和默认 NETCONF 会话。

创建 Device 对象时,必须提供 IP 地址或主机名以及身份验证详细信息才能创建 SSHv2 连接。认证可以基于用户密码或基于 RSA/DSA 密钥。您还可以选择为 SSHv2 连接指定端口号,以及发送至 NETCONF 服务器的客户端功能。

构造语法包括:

构造器参数包括:

  • hostname—(必需)NETCONF 服务器运行的设备的 IP 地址或主机名,以及通过 SSHv2 连接的设备的主机名。

  • login—(必需)NETCONF 服务器运行设备上的登录帐户的用户名。

  • password—(必需)基于用户密码的身份验证或基于密钥的身份验证的密码。如果基于密钥的身份验证不需要密码,请将此论点传递为无效。

  • pemKeyFile—(必需)文件的路径,包含 PEM 格式的 DSA/RSA 私有密钥,以进行基于密钥的身份验证。对于基于用户密码的身份验证,将此论点传递为无效。

  • port—(可选)用于建立 SSHv2 连接的端口号。默认端口为 830。如果要连接到在默认端口以外的端口上通过 SSH 配置为 NETCONF 的设备,则必须在参数中指定该端口号。

  • capabilities—(可选)如果功能不是默认功能,则要通信至 NETCONF 服务器的客户端功能。

    发送至 NETCONF 服务器的默认功能包括:

创建对象的一 Device 般语法是:

默认情况下, NetconfSession 在创建新实例 Device 并连接到 NETCONF 服务器时会创建对象。创建 Device 对象后,即可执行 NETCONF 操作。

例子

以下示例会创建具有 Device 认证 SSHv2 与 IP 地址 10.10.1.1 连接的对象。连接使用基于用户密码的身份验证,其中包含登录名称“admin”和密码“PaSsWoRd”。调用此 connect() 方法时,它会连接到设备并自动建立默认 NETCONF 会话。

要在 Device 端口 49000 而不是默认端口 830 上创建具有 NETCONF-over-SSH 连接的对象,请将端口号添加到构造器参数中。

连接到设备的默认超时值为 5000 毫秒。要将超时值设置为不同的间隔时间,请在设备对象上调用 setTimeOut() 此方法。

NETCONF Java Toolkit 类:NetconfSession

对象 net.juniper.netconf.NetconfSession 表示配置管理服务器与 NETCONF 服务器所在的设备之间的 NETCONF 会话。

默认情况下,当您创建新实例 Device 并连接到 NETCONF 服务器时,将创建 NETCONF 会话,因此无需显式创建 NetconfSession 对象。您可通过调用相关方法直接从 Device 对象执行 NETCONF 操作。

但是,有时在同一 SSHv2 连接上需要多个 NETCONF 会话。要创建多个会话,请在对象上Device调用createNetconfSession()以下示例中显示的方法:

创建附加 NETCONF 会话后,您会以与为对象呼叫相同的方式调用新 NetconfSession 对象的 Device NETCONF 操作方法。

这些 DeviceNetconfSession 类包含许多相同的方法,它们执行 NETCONF 操作,例如执行远程过程调用 (RPC) 和执行配置更改。当您在对象上 Device 调用一种方法时,它会在默认 NETCONF 会话上操作。当您在任何其他 NetconfSession 对象上调用一种方法时,它会在该 NETCONF 会话上操作。

示例:创建多个 NETCONF 会话

在以下示例中,代码片段将创建新 Device 对象。调用此 connect() 方法时,程序将连接到远程设备并建立默认 NETCONF 会话。程序会创建第二 NetconfSession 个对象 second_session。呼叫 device.getSessionID() 返回默认 NETCONF 会话的会话 ID,然后呼叫 second_session.getSessionID() 返回第二个 NETCONF 会话的会话 ID。

NETCONF Java Toolkit 类:XML

对象 net.juniper.netconf.XML 表示 XML 编码的数据,并提供修改和解析 XML 的方法。XML 对象在内部维护对象 org.w3c.dom.Document ,与其表示的 XML 数据对应。

建议您与 XML 对象一起创建新配置、远程过程调用 (RPC) 或任何基于 XML 的数据。使用 XML 对象,您可以轻松添加、删除或修改元素和属性。为了方便修改 XML 内容,XML 对象维护一个“活动”元素,表示用于修改所暴露的层次结构级别。

要创建 XML 对象,首先要创建一个 XMLBuilder 对象并构建初始 XML 层次结构。这些 XMLBuilder 方法会返回一个 XML 对象,然后在该对象上构建。这样可以方便地创建基于 XML 的配置和 RPC,还可以解析从 NETCONF 服务器收到的基于 XML 的回复。

示例:创建配置层次结构

此示例创建以下 XML 配置层次结构示例。表 1 中概述了用于创建配置层次结构的步骤。

表 1:使用 XMLBuilder 和 XML 对象创建配置层次结构

Java 代码

生成的层次结构

创建 XMLBuilder 对象和 3 级层次结构 XMLBuilder builder = new XMLBuilder();XML policy = builder.createNewConfig("security","policies","policy");

<configuration>
   <security>
      <policies>
         <policy>
         </policy>
      </policies>
   </security>
</configuration>

“策略”级别 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> 

为第一个策略 创建新的层次结构级别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>

创建“match”层次结构XML match = policyOne.append("match");  // 创建并附录应用程序阵列// 以使三个节点具有相同的节点名称 String[] applications =        {"junos-ftp","junos-ntp","junos-ssh"}; 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>

在“match  ”下添加元素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>

使用儿童“允许”元素 添加“then”层次结构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>

完整代码和最终配置

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 类:XMLBuilder

在 NETCONF 会话中,配置管理服务器与 NETCONF 服务器之间的通信通过 XML 编码的数据进行。配置管理服务器将远程过程调用 (RPC) 发送至 NETCONF 服务器,NETCONF 服务器将处理 RPC 并返回 RPC 回复。这些 net.juniper.netconf.XMLBuildernet.juniper.netconf.XML 对象有助于创建和解析 XML 编码的数据。

您可使用 XMLBuilder 对象创建新的 XML 对象。构造语法包括:

XMLBuilder 类包括创建配置层次结构的方法、RPC 或 XML 对象作为 XML 编码的数据。每个方法都过载以接受多个层次结构级别。这些方法会返回 XML 对象。例如,使用单层层次结构配置、RPC 或 XML 对象的方法包括:

  • 创建新配置(字符串 elementLevelOne

  • 创建新RPC(字符串 elementLevelOne

  • 创建新XML(字符串 elementLevelOne

以下示例代码会创建一个新的 XMLBuilder 对象 builder。该 XMLBuilder 对象称为 createNewConfig() 构建三层配置层次结构的方法,包含一个“安全”元素、一个“策略”元素子标记和一个“策略”元素,即“策略”的子。

生成的 XML 层次结构如下。

请注意,该 createNewConfig() 方法始终将层次结构括在顶级根元素 <configuration>中。同样,该 createNewRPC() 方法将层次结构括在标记 <rpc> 元素中。

生成 XML 对象后,可以从类调 XML 用方法来操作该对象。