Python——ncclient(netconf连接)

ncclient是一个用于NETCONF客户端的Python库。它旨在体用一个直观的API,将NETCONF的XML编码特性映射到Python构造和习语,并使编写网络管理脚本更容易。

功能:

  • 支持RFC 4741中定义的所有操作和功能。
  • 管道请求。
  • 异步RPC请求。
  • 保持XML的方式,除非真正需要变更。
  • 扩展。可以轻松添加新的传输映射和功能/操作。

快速使用ncclient

  • 前提条件,交换机已经配置完成netconf,并且正常连接。

默认配置:

1. 连接SSH

from ncclient import manager
#这些是需要改动的配置,默认netconf的端口是830
hostname = '192.168.1.1'
netconf_port = 830
username = 'xxxx'
password = 'xxxx'
vendor = 'h3c'
    #还可以写这些。
    Juniper: device_params={‘name’:’junos’}
    Cisco CSR: device_params={‘name’:’csr’}
    Cisco Nexus: device_params={‘name’:’nexus’}
    Huawei: device_params={‘name’:’huawei’}
    H3C: device_params={‘name’:’h3c’}

# 实例化一个netconf链接
manager_connect = manager.connect(
  host=hostname,
  port=netconf_port,
  username=username,
  password=password,
  hostkey_verify=False,
  device_params={'name': vendor},
  allow_agent=False,
  look_for_keys=False,

)

2.编辑XML格式

  • 与ncclient差异,需要注意。
#mg-soft netconf 发送数据的格式
<get xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <filter type="subtree">
    <top xmlns="http://www.h3c.com/netconf/data:1.0">
      <Ifmgr>
        <Interfaces>
          <Interface/>
        </Interfaces>
      </Ifmgr>
    </top>
  </filter>
</get>

#ncclient所需的文件格式
request_xml = '''
<filter type="subtree">
    <top xmlns="http://www.h3c.com/netconf/data:1.0">
      <Ifmgr>
        <Interfaces/>
      </Ifmgr>
    </top>
  </filter>
'''

3. 连接进行操作

conf = manager_connect.get(request_xml)
print(conf)

获取信息

  • 获取所有配置

#不需要配置XML模板,提取出所有交换机的配置
conf = manager_connect.get_config('running')
print(conf)
  • 获取特定的信息

#get方式获取
request_xml = '''
<filter type="subtree">
    <top xmlns="http://www.h3c.com/netconf/data:1.0">
      <Ifmgr>
        <Interfaces/>
      </Ifmgr>
    </top>
  </filter>
'''

conf = manager_connect.get(request_xml)
print(conf)
#获取ARP信息
<ARP>
    <ArpTable/>
</ARP>

修改信息

 

过滤信息

  • 大部分的过滤要在获取的时候进行,而这里的过滤是提取出来ncclient类型时,里面附带的标签进行过滤。
c = m.get(VLAN_RPC)
# print(c)  #类型<class 'ncclient.operations.retrieve.GetReply'>
# print(c.xml)  #类型<class 'str'>

d = c.data.find('.//{http://www.h3c.com/netconf/data:1.0}Interfaces')  #获取指定的一个数据
# d = c.data.findall('.//{http://www.h3c.com/netconf/data:1.0}Interfaces')  #获取所有的指定数据(返回列表形式)

for i in d.iter('{http://www.h3c.com/netconf/data:1.0}Name'):   #返回可迭代对象
    print(type(i))      #<class 'lxml.etree._Element'>
    print(type(i.text)) #<class 'str'>

 

 

#查看服务器所支持的netconf的能力集
for i in manager_connect.server_capabilities:
  print(i)
'''
urn:ietf:params:netconf:base:1.0
urn:ietf:params:netconf:capability:writable-running:1.0
urn:ietf:params:netconf:capability:notification:1.0
urn:ietf:params:netconf:capability:validate:1.0
urn:ietf:params:netconf:capability:interleave:1.0
urn:ietf:params:netconf:capability:rollback-on-error:1.0
urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04
urn:h3c:params:netconf:capability:h3c-netconf-ext:1.0
urn:h3c:params:netconf:capability:h3c-save-point:1.0
urn:h3c:params:netconf:capability:not-need-top:1.0
urn:h3c:params:netconf:capability:module-specified-namespace:1.0
urn:h3c:params:netconf:capability:h3c-name2index:1.1
http://www.h3c.com/netconf/data:1.0-Syslog?module=Syslog&revision=2015-05-07
http://www.h3c.com/netconf/config:1.0-Syslog?module=Syslog&revision=2015-05-07
http://www.h3c.com/netconf/action:1.0-Syslog?module=Syslog&revision=2015-05-07
http://www.h3c.com/netconf/data:1.0-SNMP?module=SNMP&revision=2015-05-07
http://www.h3c.com/netconf/config:1.0-SNMP?module=SNMP&revision=2015-05-07
http://www.h3c.com/netconf/action:1.0-SNMP?module=SNMP&revision=2015-05-07
http://www.h3c.com/netconf/data:1.0-RMON?module=RMON&revision=2015-05-07
http://www.h3c.com/netconf/config:1.0-RMON?module=RMON&revision=2015-05-07
http://www.h3c.com/netconf/data:1.0-Fundamentals?module=Fundamentals&revision=2015-05-07
http://www.h3c.com/netconf/config:1.0-Fundamentals?module=Fundamentals&revision=2015-05-07
http://www.h3c.com/netconf/data:1.0-FileSystem?module=FileSystem&revision=2015-05-07
http://www.h3c.com/netconf/action:1.0-FileSystem?module=FileSystem&revision=2015-05-07
http://www.h3c.com/netconf/data:1.0-CWMP?module=CWMP&revision=2015-05-07
http://www.h3c.com/netconf/config:1.0-CWMP?module=CWMP&revision=2015-05-07
http://www.h3c.com/netconf/data:1.0-Configuration?module=Configuration&revision=2015-05-07
http://www.h3c.com/netconf/config:1.0-Configuration?module=Configuration&revision=2015-05-07
http://www.h3c.com/netconf/action:1.0-Configuration?module=Configuration&revision=2015-05-07
'''

manager.OPERATIONS
Out[10]: 
{'get': ncclient.operations.retrieve.Get,
 'get_config': ncclient.operations.retrieve.GetConfig,
 'get_schema': ncclient.operations.retrieve.GetSchema,
 'dispatch': ncclient.operations.retrieve.Dispatch,
 'edit_config': ncclient.operations.edit.EditConfig,
 'copy_config': ncclient.operations.edit.CopyConfig,
 'validate': ncclient.operations.edit.Validate,
 'commit': ncclient.operations.edit.Commit,
 'discard_changes': ncclient.operations.edit.DiscardChanges,
 'cancel_commit': ncclient.operations.edit.CancelCommit,
 'delete_config': ncclient.operations.edit.DeleteConfig,
 'lock': ncclient.operations.lock.Lock,
 'unlock': ncclient.operations.lock.Unlock,
 'create_subscription': ncclient.operations.subscribe.CreateSubscription,
 'close_session': ncclient.operations.session.CloseSession,
 'kill_session': ncclient.operations.session.KillSession,
 'poweroff_machine': ncclient.operations.flowmon.PoweroffMachine,
 'reboot_machine': ncclient.operations.flowmon.RebootMachine}

 

NETCONF API 文档分属于四个命名空间:
data 命名空间: 提供系统的运行状态数据和配置数据,为只读,支持下发 get get-bulk
作。
config 命名空间: 提供系统的配置数据信息,可读写,支持下发 get-configget-bulk-config
edit-config 操作。
action 命名空间: 通常提供系统非配置类的操作(如 pingreset 操作),可执行,支持下发
action 操作。
event 命名空间: 提供系统的事件数据信息,支持通过 create-subscription 操作订阅指定类型
的事件。
 

 

https://blog.csdn.net/qq_38265137/article/details/103756080

posted @   新兵蛋Z  阅读(2105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示