Python自动化运维示例:使用Python管理网络设备

在这里插入图片描述
先来说说为什么要学习Python吧。首先,确实,这几年在运维领域Python确实比较火,他的语法简单,功能强大,而且最重要的是上手相对比较容易;

其次,目前在日常工作中,确实十分急需自动化运维的工具,例如监控工具、巡检工具、配置工具等。身为网络行业的一员,我猜你一定碰到过类似需求或者问题:

需求一:某司使用了超过500台华为交换机,有一天你接到通知,现有交换机的操作系统存在很多安全漏洞,需要尽快升级,你怎么办?

在这里插入图片描述
需求二:某大型企业网络中,有超过2000台网络设备,包括路由器、交换机、防火墙等,最近公司更换了AAA认证服务器的IP地址,你需要修改相关配置,你怎么办?

类似这种重复劳动的苦逼需求,一直伴随着你。。。让我们一起,通过Python语言实现网络运维的自动化,提高网络运维工作的效率和准确率。

首先,Python可以通过套接字编程和socket模块操纵底层网络,从而为Python所在的操作系统和网络设备之间搭建一个低层次的网络接口。

此外,Python模块还可以通过Telnet、SSH和API与网络设备进行更高级别的交互。今天将简单探讨如何在Python中使用Telnet模块在远程设备上建立连接和执行命令。

在Python中使用Telnet协议:

Telnet是TCP/IP协议栈中最早可用的协议之一,主要用来在服务器和客户端之间建立连接、交换数据。服务器端监听TCP端口23,等待客户端的连接请求。在下面的例子中,我们将创建一个Python脚本作为Telnet客户端。

Python原生的telnetlib库已经支持Telnet,所以不需要另外安装。
客户端对象可以通过telnetlib模块中的Telnet()类实例化创建。

通过这个对象,我们能够使用telnetlib中的两个重要函数——read_until()(用于读取输出结果)和write()(用于向远程设备写入内容)。

这两个函数用来和Telnet连接交互,从Telnet连接读取或向Telnet连接写入数据。

还有一点非常关键,使用read_until()读取Telnet连接的内容之后缓冲区会被清空,无法再次读取。

因此,如果在后面的处理中还会用到之前读取的重要数据,需要在脚本里将其另存为变量。

让我们一步步分析这个脚本:

(1)在Python脚本中导入telnetlib模块,在变量中定义用户名和密码。代码如下。

import telnetlib
username = "zhaox"      #定义用户名
password = "huawei@123"    #定义密码
enable_password = "access123"  #配置模式密码 如果没有可省略
conn = telnetlib.Telnet(host="192.168.1.1") 
#定义一个变量,用来和远程主机建立连接。注意,只需要提供远程主机的IP地址,不用在连接建立过程中提供用户名或密码。

(2)通过读取Telnet连接返回的输出并搜索“Username:”关键字来提供Telnet连接的用户名。然后写入管理员用户名。如果需要,用同样的方法输入Telnet密码。

conn.read_until(b"Username:")conn.write(username.encode('utf-8') + b"\n")conn.read_until(b"Password:")conn.write(password.encode('utf-8') + b"\n")

Telnet连接建好之后,在脚本中加上控制台提示符非常重要;否则,连接将陷入死循环。接着Python脚本就会超时并出现错误。

(3)向Telnet连接写入dis ip int b命令并开始读取返回内容,直到出现路由器提示符(最后的字符)为止。通过以下命令可以得到路由器的接口配置。

conn.read_until(b">")
conn.write(b"sys" + b"\n")
conn.read_until(b"Ctrl+Z.")
conn.write(b"dis ip int b" + b"\n")
output = conn.read_until(b"4 up         up")
print(output.decode())

完整的脚本如下所示:

# # coding=utf-8
# """
# python连接路由器演示
# """
import telnetlib
username = "zhaox"      #定义用户名
password = "huawei@123"    #定义密码
conn = telnetlib.Telnet(host="192.168.1.1")
#定义变量用于建立远程连接
conn.read_until(b"Username:")
conn.write(username.encode('utf-8') + b"\n")
conn.read_until(b"Password:")
conn.write(password.encode('utf-8') + b"\n")
conn.read_until(b"Change now? [Y/N]:")
conn.write(b"n" + b"\n")
conn.read_until(b">")
conn.write(b"sys" + b"\n")
conn.read_until(b"Ctrl+Z.")
conn.write(b"dis ip int b" + b"\n")
output = conn.read_until(b"4       up         up")
print(output.decode())

脚本运行结果如下所示:
图片

注意,在输出中包含了执行的命令dis ip int b,可以使用内置的字符串函数(如replace())从输出中清除它们,例如:cleaned_output = output.replace(“dis ip int b”,“”)

现在我们用telnetlib将VLAN配置推送到实验环境中的4台交换机。使用Python的range()函数创建一个VLAN列表,遍历列表将VLAN ID推送到当前交换机。注意,我们将交换机的IP地址放到了另一个列表中,使用外部for循环来遍历这个列表。

# 批量创建VLAN示例
import telnetlib
import getpass
import time
switch_ips = [          #定义交换机IP地址
"192.168.100.101",
"192.168.100.102",
"192.168.100.103",
"192.168.100.104"]
username = "zhaox"        #定义账号密码
password = "huawei@123"
for sw_ip in switch_ips:
  print("\n ############### 当前设备:"+sw_ip+" ############### \n")
  con = telnetlib.Telnet(host=sw_ip.strip())
  con.read_until(b"Username:")
  con.write(username.encode('utf-8') + b"\n")
  con.read_until(b"Password:")
  con.write(password.encode('utf-8') + b"\n")
  con.read_until(b"The current login time")
  con.write(b"sys" + b"\n")
  vlans = range(300,304)  #VLAN ID 编号 300-304 不含304
for vlan_id in vlans:
    print("\n ############### 正在添加 VLAN "+str(vlan_id)+" ############### \n")
    v = "vlan "+str(vlan_id)
    con.write(v.encode('utf-8') + b"\n")  #添加VLAN
# con.write(b"undo " + v.encode('utf-8') + b"\n")  删除VLAN
    time.sleep(1)  #创建一次后等待交换机反应1

最外层的for循环用来遍历设备列表,然后在每次循环(每个设备)中生成范围为300~304之间的四个数字作为VLAN ID并将它们推送到当前设备,当然 如果需要更多VLAN,则设置列表范围更大即可。

脚本运行结果如下:
图片

当然,也可以通过交换机控制台检查运行结果:
图片

小结:

今天我们开始使用Python进入网络自动化世界。本次讨论了Python中的一些工具,通过Telnet建立到远程节点的连接,并使用脚本为多台设备推送配置,Python都可以轻松实现。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等习教程。带你从零基础系统性的学好Python!

零基础Python学习资源介绍

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈

在这里插入图片描述

在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值