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-config、 get-bulk-config
和 edit-config 操作。
• action 命名空间: 通常提供系统非配置类的操作(如 ping、 reset 操作),可执行,支持下发
action 操作。
• event 命名空间: 提供系统的事件数据信息,支持通过 create-subscription 操作订阅指定类型
的事件。
https://blog.csdn.net/qq_38265137/article/details/103756080
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)