网络行业告诉我们,我们需要学习 Python,我们需要进行网络编程,我们需要学习网络自动化,CLI 已死!但是对于我们大多数人来说什么都没有改变,我们在想有什么大惊小怪的?
事实是,使用Python 进行网络自动化是一项我们都必须很快掌握的基本技能,因此您不妨开始学习一些基础知识。
在 2020 年,您不必成为开发人员即可成为网络工程师,但学习一点 Python 肯定会有所帮助。
下面的示例是可用于执行一些非常简单的任务的短代码片段。
您只需要一个安装了 Python 的设备和一些要配置的测试路由器。
我将使用 EVE-NG 在 Ubuntu 18.04 上运行 4 个 Cisco CSR1000v 路由器和 Python,并使用 Visual Studio Code 编辑我的 Python 代码。
使用 Netmiko 连接到 Cisco 路由器
使用 Python 连接到 Cisco 设备的最简单方法是通过 telnet,但在大多数环境中,telnet 被禁用,因此虽然学习 telnet 库可能会很好,但我个人认为您最好直接进入 SSH 使其工作,然后有一些可以在生产中使用的东西。
Netmiko 基于 Paramiko SSH 库,它的工作有点棘手。编写 Netmiko 库的 Kirk Byers 使使用 Python 和 SSH 连接到网络设备变得更加容易。该库适用于各种网络设备,但对于下面的示例,我将使用 Cisco
https://pynet.twb-tech.com/blog/automation/netmiko.html
您可以观看视频或按照下面的代码示例进行操作。
# Use Netmiko to connect to Cisco using SSH and run simple commands
from netmiko import ConnectHandler
CSR = {
'device_type': 'cisco_ios',
'ip': '192.168.1.220',
'username': 'roger',
'password': 'cisco'
}
net_connect = ConnectHandler(**CSR)
output = net_connect.send_command('show ip int brief')
print (output)
只需将此代码保存为类似 connect.py 的内容
将IP地址更改为路由器的IP地址,并更改用户名和密码。
运行 Python 脚本,您应该会看到路由器上 ip 接口的输出。
使用 Netmiko 在 Cisco 路由器上配置接口
我们可以把上面的代码加上一些配置信息,这样你的 Python 脚本就可以真正配置路由器了。
将以下代码添加到 connect.py 脚本中,您将能够在路由器上配置环回接口
config_commands = ['interface loopback 2', 'ip address 2.2.2.2 255.255.255.0']
output = net_connect.send_config_set(config_commands)
print (output)
只需更改不同配置的接口名称和 IP 地址即可。
这只是 Python 功能的皮毛,但学习任何新技能的主要部分才刚刚开始!
使用 ipaddress 生成可用的 IP 地址
一个出色的 Python 内置模块是ipaddress。
完整的 ipaddress 文档在这里
https://docs.python.org/3/library/ipaddress.html
使用此模块,您只需输入几行代码,就可以开始使用 Python 构建一个脚本,该脚本将为特定子网生成可用的 IP 地址。
我们举一个简单的例子。您已获得一个子网和一个掩码,并被要求从该范围内生成所有可用的 IP 地址。
子网是 192.0.2.0/28
您可以手动执行此操作,也可以使用子网计算器。或者您可以使用一个简单的 Python 脚本。使用 Python 的好处是,一旦您生成了第一个位,您就可以轻松地继续制作该脚本,然后使用已生成的地址配置设备。
这将不会在本文中介绍,但希望您将开始看到使用 Python 进行网络连接的力量。
# Script using ipaddress module to print out useable IP range
import ipaddress
net4 = ipaddress.ip_network('192.0.2.0/28')
for x in net4.hosts():
print(x)
与上面的 Netmiko 示例一样,将代码保存为名为 printip.py 的文件(不要将文件保存为 ipaddress.py,因为它会导致模块出现问题)
运行代码,您应该会看到以下输出。
只需更改代码中的子网和/或掩码即可更改输出。
这个例子也为网络工程师提供了一个很好的 Python 面试问题——所以记住这个!
我希望你能看到网络编程是网络工程师需要学习的技能。
查看我的其他面向网络工程师的 Python 脚本