netmiko 自动判断设备类型python_Python的网络设备信息采集利器:Netmiko

居然漏发了这篇,赶紧补上。。。

采集网络设备有多种方法,常见的有SSH、Telnet、SNMP、Netconf、设备或控制器的Restful API。

之前的分享讲解了Netconf的采集,Netconf的前提是设备支持此协议,如果设备不支持或者是工程师一时难以接受,我们就来分享一个基于CLI的网络设备信息采集工具Netmiko(也是Python的第三方包,非常优秀的网络工具包)。

使用ssh登录设备输入命令回显输出。python常用的包有pexpect、paramiko、netmiko。个人推荐使用netmiko,封装的比较好,支持的厂商和型号(系列)比较多,也可以对Linux进行操作。

pexpect像是Linux的expect,实际使用中需要二次开发或者定制回显的expect字符串(比如每敲一段show version,当我们看到“设备名#“就代表回显结束,这个“设备名#”就是expect的字符串)。

paramiko相比pexpect进行过一些封装,可以比较好的自动判断回显,但是遇到分页还是需要自己处理,程序无法处理。而网络设备在执行命令的时候经常有分页,或者一些特殊模式等等。所以paramiko对网络设备支持还是有限。

那Netmiko是基于paramiko的二次封装,从名字上就可以看出来它有两部分,net代表网络,miko代表的是paramiko。它能非常好的适配网络设备,处理好各厂商的分页、特殊模式,同时针对网络的一些特点加入了config、save、enable、文件传输(多用于备份)等网络所特有的一些功能。

安装netmiko包

请安装python(建议Anaconda,简单粗暴)后。记得是python3.7及以上版本

执行"pip install netmiko"命令即可。

使用netmiko

from netmiko import ConnectHandler

'''

关于netmiko的使用,建议查看官网的说明,

简单的show命令的话,用以下代码即可,注意的是device_type

内置常用的有有以下 请留意左侧的key值,是支持的设备系列。

CLASS_MAPPER_BASE = {

'a10': A10SSH,

'accedian': AccedianSSH,

'alcatel_aos': AlcatelAosSSH,

'alcatel_sros': AlcatelSrosSSH,

'apresia_aeos': ApresiaAeosSSH,

'arista_eos': AristaSSH,

'aruba_os': ArubaSSH,

'avaya_ers': AvayaErsSSH,

'avaya_vsp': AvayaVspSSH,

'brocade_fastiron': RuckusFastironSSH,

'brocade_netiron': BrocadeNetironSSH,

'brocade_nos': BrocadeNosSSH,

'brocade_vdx': BrocadeNosSSH,

'brocade_vyos': VyOSSSH,

'checkp

你可能感兴趣的:(netmiko,自动判断设备类型python)