文章插图
4.使用netmiko配置设备netmiko可以通过SSH配置远程设备,通过.config方法进入设备的配置模式,然后按照list格式中的信息(配置列表)配置设备 。配置列表可以直接写在Python脚本中,也可以从文件中读取,然后用readlines()方法转换为列表 。
from netmiko import ConnectHandlerSW2 = {'device_type': 'cisco_ios','ip': '10.10.88.112','username': 'admin','password': 'access123','secret': 'access123',}core_sw_config = ["int range gig0/1 - 2","switchport trunk encapsulationdot1q","switchport mode trunk","switchport trunk allowed vlan1,2"]print "########## Connecting to Device {0} ############".format(SW2['ip'])net_connect = ConnectHandler(**SW2)net_connect.enable()print "***** Sending Configuration to Device *****"net_connect.send_config_set(core_sw_config)
上面的脚本以另外一种形式连接到SW2并进入特权模式 。但这次使用的是另一个netmiko方法——send_config_set(),该方法需要使用列表形式的配置文件,同时进入设备的配置模式并根据列表对设备进行配置 。这里测试了一个简单的配置,即修改gig0/1和gig0/2,并将这两个端口配成trunk模式 。在设备上执行show run命令时,如果命令执行成功,会出现类似下面的输出 。文章插图
5.netmiko中的异常处理在设计Python脚本时,我们可能会假设设备已启动并运行,并且用户已提供了正确的登录信息,但实际情况并非总是如此 。有时Python和远程设备之间的网络连接可能存在问题,或者用户输入了错误的登录信息 。如果发生这种情况,Python通常会抛出异常并退出,但这种解决方案显然不够完美 。
netmiko中的异常处理模块netmiko.ssh_exception提供的一些异常处理类可以处理上面所说的那些情况 。第一个类AuthenticationException能够捕获远程设备中的身份验证错误 。第二个类NetMikoTimeoutException能够捕获netmiko和设备之间的超时或任何连接问题 。下面的例子中使用try-except子句包含了ConnectHandler()方法,用来捕获超时和身份验证异常 。
from netmiko import ConnectHandlerfrom netmiko.ssh_exception import AuthenticationException,NetMikoTimeoutExceptiondevice = {'device_type': 'cisco_ios','ip': '10.10.88.112','username': 'admin','password': 'access123','secret': 'access123',}print "########## Connecting to Device {0}############".format(device['ip'])try:net_connect = ConnectHandler(**device)net_connect.enable()print "***** show ip configuration of Device *****"output = net_connect.send_command("show ip int b")print outputnet_connect.disconnect()except NetMikoTimeoutException:print "=========== SOMETHING WRONG HAppEN WITH {0}============".format(device['ip'])except AuthenticationException:print "========= Authentication Failed with {0}============".format(device['ip'])except Exception as unknown_error:print "============ SOMETHING UNKNOWN HAPPEN WITH {0} ============"
6.设备自动发现netmiko提供了一种可以“猜测”设备类型和发现设备的机制 。通过组合使用SNMP发现OIDS和在远程控制台上执行多个show命令这两种方式,根据输出字符串检测路由器的操作系统和类型 。然后,netmiko将相应的驱动程序加载到ConnectHandler()类中 。#!/usr/local/bin/python__author__ = "Bassim Aly"__EMAIL__ = "basim.alyy@gmail.com"from netmiko import SSHDetect, Netmikodevice = {'device_type': 'autodetect','host': '10.10.88.110','username': 'admin','password': "access123",}detect_device = SSHDetect(**device)device_type = detect_device.autodetect()print(device_type)print(detect_device.potential_matches)device['device_type'] = device_typeconnection = Netmiko(**device)
在上面的脚本中,应注意以下几点 。首先,设备字典中的device_type等于autodetect,也就是告诉netmiko在检测到设备类型之前不要加载驱动程序 。
然后,使用netmiko的SSHDetect()类发现设备 。它使用SSH连接到设备,并执行一些命令以找出操作系统的类型,结果以字典形式返回 。
接着,使用autodetect()函数将匹配度最高的结果赋给device_type变量 。
接下来,输出potential_matches,查看字典内的全部返回结果 。
最后,可以更新设备字典并为其分配新的device_type 。
推荐阅读
- 四种Python爬虫常用的定位元素方法对比,你偏爱哪一款?
- Pyppeteer爬虫神器详解
- 6s管理包括哪六个方面?
- 出现化妆品过敏怎么办
- 《管理学原理》试卷a 2020?管理学原理试卷及答案
- 照相机的使用方法和注意事项
- ticpods2ai真无线耳机?ticpods2pro单耳使用
- 使用 Go 打造另一款简单实用的 ORM
- 使用Redis轻松实现秒杀系统
- 使用Arkime抓包,捕获解密HTTPS流量