您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
网络设备管理(Python自动化运维实战:使用Python管理网络设备)
脚本,设备,地址网络设备管理(Python自动化运维实战:使用Python管理网络设备)
发布时间:2020-12-06加入收藏来源:互联网点击:
from netmiko import ConnectHandlerconnection = ConnectHandler(**R1)connection.enable()output = connection.send_command("show ip int b")print output
脚本输出结果如下。
注意,这里看到的输出结果去掉了命令行中的命令回显和设备提示符。默认情况下,netmiko会替换设备的返回结果,使输出更加整洁,替换过程通过正则表达式完成,这部分会在下一章中介绍。
如果不想使用这种方式,而是希望看到命令提示符,并在返回结果的后面执行命令,可以在.send_command()函数中加上以下参数。
output = connection.send_command("show ip intb",strip_command=False,strip_prompt=False)
strip_command=False和strip_prompt=False告诉netmiko保留而不是替换命令行回显和提示符。默认情况下它为True,可以根据需要进行设置。
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 output net_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。
4.2 在Python中使用Telnet协议Telnet是TCP/IP协议栈中最早可用的协议之一,主要用来在服务器和客户端之间建立连接、交换数据。服务器端监听TCP端口23,等待客户端的连接请求。
在下面的例子中,我们将创建一个Python脚本作为Telnet客户端,拓扑中的其他路由器和交换机则作为Telnet服务器。Python原生的telnetlib库已经支持Telnet,所以不需要另外安装。
客户端对象可以通过telnetlib模块中的Telnet()类实例化创建。通过这个对象,我们能够使用telnetlib中的两个重要函数——read_until()(用于读取输出结果)和write()(用于向远程设备写入内容)。这两个函数用来和Telnet连接交互,从Telnet连接读取或向Telnet连接写入数据。
还有一点非常关键,使用read_until()读取Telnet连接的内容之后缓冲区会被清空,无法再次读取。因此,如果在后面的处理中还会用到之前读取的重要数据,需要在脚本里将其另存为变量。
Telnet数据以明文形式发送,因此通过“中间人攻击”可以捕获并查看到Telnet数据,如用户信息和密码。即便如此,一些服务提供商和企业仍然在使用它,只是他们会集成VPN和radius/tacacs协议,以提供轻量级和安全的访问方式。
让我们一步步分析这个脚本。
(1)在Python脚本中导入telnetlib模块,在变量中定义用户名和密码。代码如下。
import telnetlibusername = "admin"password = "access123"enable_password = "access123"
(2)定义一个变量,用来和远程主机建立连接。注意,只需要提供远程主机的IP地址,不用在连接建立过程中提供用户名或密码。
cnx = telnetlib.Telnet(host="10.10.88.110") #here we're telnet toGateway
(3)通过读取Telnet连接返回的输出并搜索“Username:”关键字来提供Telnet连接的用户名。然后写入管理员用户名。如果需要,用同样的方法输入Telnet密码。
上一篇:防盗窗价格(防盗窗是铝合金好还是不锈钢好 ,铝合金防盗窗多少钱一平方?)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |