网工Python之路之paramiko 模块实验(一)初来乍到
2021/7/26 17:06:18
本文主要是介绍网工Python之路之paramiko 模块实验(一)初来乍到,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
感谢知乎两位大佬:@弈心和@朱嘉盛
@弈心大佬的实验主要是基于 linux 系统、思科设备或 GNS3 模拟器完成。
@朱嘉盛大佬考虑到当前在国内华为较为主流,也用 Windows 系统,尝试用华为的真机或者 eNSP 模拟器,把书中提及的实验做一做,方便大家学习记录,方便交流。
小编采用EVE-ng+linux做思科部分使用,Ensp+windows来做华为的实验。
首先咱们看下弈心大佬带来的思科的实验:
平台工具:
-
实验平台:Linux Centos7
-
使用工具:EVE-ng、python 3.6.8
实验拓扑:
注意:
书中使用了 192.168.2.0/24 ,我这里才有eve桥接的虚拟网段192.168.242.0/24来演示本次实验。
本次实验只需要用到 Linux ,透明交换机SW(启动即可,无需配置)、LSW1(Python 第三方库 paramiko 要操控的设备。),其它 LSW未启动,后续实验再使用。
实验目的:
用Python Paramiko 模块实现 SSH 登陆单个交换机LSW1(192.168.242.11),为其 LoopBack0 端口配置IP地址 1.1.1.1 /32。配置完成后对设备进行配置保存,并退出。
实验前检查
检查网络连通性(PC ping 测 192.168.242.11),打开Linux,执行 ping 192.168.242.11。
检查 Linux的 arp 表项,执行 arp -a 查看表项。
交换机 LSW1 上查看接口 vlanif 1 的 MAC 地址,与 win10 中 arp 表项里的 MAC 对应得上,都为 4c1f-ccf2-1fdb
show interface vlanif 1
交换机 LSW1 上查看接口 vlanif 1 的 arp 表项,均能对应上
show arp interface vlanif 1
交换机 LSW1 确认 loopback 0 口不存在,存在则删除(多次实验造成)
LSW1配置
初始化1.配置hostname 和domain-namehostname LSW1ip domain-name shiranit.com2.产生密钥,产生1024位的密钥crypto key generate rsa general-keys modulus 10243.配置sssh的信息会话超时时间ip ssh time-out 120最大认证次数ip ssh authentication-retries 3启用ssh和telnet认证line vty 0 4 transport input ssh telnet login local4.本地认证用户 enable passwod 123 username python privilege 15 password 123 PS: privilege 15这么设置是为了免去登陆时输入enable密码
Python 代码
代码讲解,大神在书里和专栏中已逐条做了解释
# import 导入模块import paramikoimport time# 定义三个字符串类型的变量ip = '192.168.242.11'username = 'python'password = '123'# 开启SSH会话赋值给变量ssh_client = paramiko.SSHClient()# 开启可接收陌生的ssh服务会话ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)# 开启交互式会话command = ssh_client.invoke_shell()print ('已经成功登陆路由器' + ip)# 向路由器发出命令command.send('configure terminal\n')command.send('interface loop 0\n')command.send('ip add 1.1.1.1 255.255.255.255\n')command.send('end\n')command.send('wr mem\n')# 延时5秒time.sleep(5)# 设置截屏长度并打印出来output = command.recv(65535).decode('ascii')print (output)# 退出ssh会话ssh_client.close
实验中观察
开启调测(实验中可观察),执行代码过程中,可以 debug 到交互包。
LSW1# debug ip packet
实验结果检查
脚本跑完后,可以到 LSW1 上查看 LoopBack 0 口的 IP 地址是否已经正确的配置上了。
show running-config interface LoopBack 0
代码运行截屏
大神在书里有解释,以下做了运行脚本时是否有带 decode("ascii") 的效果对比。
带有decode("ascii")的效果
不带decode("ascii")的效果
再来看看@朱嘉盛大佬带来的华为实验:
平台工具:
-
实验平台:WIN10
-
使用工具:eNSP v1.3.00.100、python 3.7.3
注意:
1、eNSP 模拟器目前官方暂时下架了,网上不难找,据说官方在开发新的更强大的版本ing。
2、Python 用 3.9 还是 3.7 的关系不大。
3、如果我们从零开始的话,就先不用什么集成开发环境,先用 Python 自带的编辑器,从最简单的开启,一点一点慢慢积累沉淀。
实验拓扑:
书中使用了 192.168.2.0/24 网段正好我自己 NAS 组网网段冲突,因而我换成 192.168.242.0/24 网段。我自己的电脑(Win10 已安装 python 3.7.3)设置一块虚拟网卡地址为 192.168.242.1/24,桥接到云彩,与实验拓扑拉通组网。
本次实验只需要用到 PC ,透明交换机SW1(启动即可,无需配置)、LSW1(Python 第三方库 paramiko 要操控的设备。),其它 LSW未启动,后续实验再使用。
实验目的:
用Python Paramiko 模块实现 SSH 登陆单个交换机LSW1(192.168.242.11),为其 LoopBack0 端口配置IP地址 1.1.1.1 /32。配置完成后对设备进行配置保存,并退出。
实验前检查
检查网络连通性(PC ping 测 192.168.242.11),打开 cmd,执行 ping 192.168.242.11。
检查 win10 的 arp 表项,打开 cmd ,执行 arp -a ,找到 接口: 192.168.242.1 --- 0x10 查看表项。
交换机 LSW1 上查看接口 vlanif 1 的 MAC 地址,与 win10 中 arp 表项里的 MAC 对应得上,都为 4c1f-ccf2-1fdb
display interface vlanif 1
交换机 LSW1 上查看接口 vlanif 1 的 arp 表项,均能对应上
display arp interface vlanif 1
交换机 LSW1 确认 loopback 0 口不存在,存在则删除(多次实验造成)
LSW1配置
sysname LSW1aaa# 密码明文 123 local-user python password cipher #*C>*$C`S!INZPO3JBXBHA!! local-user python privilege level 3 local-user python service-type sshinterface Vlanif1 ip address 192.168.242.11 255.255.255.0stelnet server enable# 下面这条很关键,我一开始没配置这条,一直 ssh 反馈有错误。# 模拟器的产品手册说这条是默认值,但测试后需要手动配置。ssh authentication-type default passworduser-interface vty 0 4 authentication-mode aaa protocol inbound ssh
Python 代码
代码讲解,大神在书里和专栏中已逐条做了解释,我做的主要目标是把大神的 linux+思科设备,转成 windows + 华为设备。
import paramikoimport timeip = "192.168.242.11"username = "python"password = "123"ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip, username=username, \ password=password, look_for_keys=False)print("Successfully connected to ",ip)command = ssh_client.invoke_shell()command.send("sys\n")command.send("interface LoopBack 0\n")command.send("ip address 1.1.1.1 255.255.255.255\n")command.send("return\n")command.send("save\n")command.send("y\n")time.sleep(3)command.send("display this\n")time.sleep(1)output = command.recv(65535)print(output.decode("ascii"))ssh_client.close()
实验中观察
开启调测(实验中可观察),执行代码过程中,可以 debug 到交互包。
debugging ip packet terminal debugging
实验结果检查
脚本跑完后,可以到 LSW1 上查看 LoopBack 0 口的 IP 地址是否已经正确的配置上了。
display current-configuration interface LoopBack 0
代码运行截屏
有一点折磨我比较久,提一下,关于 Python 3 中,回显内容格式为字节型字符串,于是得用 decode(),encode() 等方法来操作字符串显示,大神在书里有解释,以下做了运行脚本时是否有带 decode("ascii") 的效果对比。
后续:
除了 Ensp 安装与使用,Python 安装与使用,第三方库 paramiko 安装与使用外,可能还有如下这些疑问,有需要则后续再交流(看本文有没人理睬我= =哈)。
1、关于 WIN 10 怎么配置测试的环回口?
2、怎么手工用 Securecrt 通过 win 环回口网卡桥接【模拟器云彩】,登录及操作模拟器网元?
3、虽然 telnet 是明文传输,安全性不够,但其实大量的非公网业务设备依然使用 telnet 进行管理,如何调动 telnetlib 模块来使用?(我前期有进行了尝试,发现华为 telnet 的设置可能是简化过的,然后用 telnetlib 操作后,打印全部截屏会出错,暂时还未进行梳理。)
更多精彩推荐:
网工Python之路之基础笔记(一)
用python实现快速ping网段
python实用脚本:网络设备批量调试及备份
python实现简单重复性操作
这篇关于网工Python之路之paramiko 模块实验(一)初来乍到的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享
- 2024-11-06Python 基础编程入门教程
- 2024-11-05Python编程基础:变量与类型