网工Python之路——Netmiko模块实验(思科)

news2024/11/25 4:37:51

小白网工的python之路

「Python 网络自动化」Netmiko

实验环境

我的实验环境是GNS3搭建拓扑图,用云桥接到在VMware Workstation 16运行的CentOS 7,

CentOS 7上搭建好了python3.8,

所有交换机已经预配好了SSH服务,ssh登录账号为python,密码为123

拓扑

IP规划

CentOS 7 跑python代码192.168.10.46
vIOS-L2-1192.168.10.111
vIOS-L2-2192.168.10.112
vIOS-L2-3192.168.10.113
vIOS-L2-4192.168.10.114
vIOS-L2-5192.168.10.115

实验一 -lab1

实验目的

使用Netmiko登陆第一台交换机

实验准备

1.CentOS 7先下载好netmiko模块:

pip install netmiko

2.在CentOS 7上创建netmiko-lab1.py文件:

python代码

from netmiko import ConnectHandler

sw1 = {
	'device_type': 'cisco_ios',
	'ip': '192.168.10.111',
	'username': 'python',
	'password': '123'
}

with ConnectHandler(**sw1) as connect:
	print ("已经成功登陆交换机" + sw1['ip'])
  • 重点代码解析:
  • 首先通过 import 语句从Netmiko导入它的核心对象ConnectHandler()
  • 创建一个名为SW1的字典,该字典包含'device_type'、'ip'、'username'和'password'4个必选的键
  • 必须通过'device_type'来指定需要登录的设备的类型

执行代码

1.执行脚本前先在S1上开启debug ip ssh,以便我们验证脚本是否真正SSH登录了交换机。

2.执行代码

验证结果

能看到debug日志,说明登陆成功!

至此,我们的实验1成功!


实验二 -lab2

实验目的

通过Netmiko向设备做配置

实验准备

1.先创建一个config-lab2.txt文件,然后写入下列配置命令,

这里我们将vlan1端口的description改为netmiko-lab2.py

int vlan1
description netmiko-lab2.py

2.在CentOS 7上创建netmiko-lab2.py文件:

python代码

from netmiko import ConnectHandler

sw1 = {
        'device_type': 'cisco_ios',
        'ip': '192.168.10.111',
        'username': 'python',
        'password': '123'
}

commands = ['interface g0/0', 'description netmiko.py']

with ConnectHandler(**sw1) as connect:
        print ("已经成功登陆交换机" + sw1['ip'])
        output = connect.send_command('show interface description')
        print(output)
        output = connect.send_config_set(commands)
        print(output)
        output = connect.send_config_from_file('config-lab2.txt')
        print(output)
        output = connect.send_command('show interface description')
        print(output)
        # output = connect.send_command('wr mem')
        # print(output)
  • 重点代码解析:
  • 本实验中使用了netmiko的三种函数向设备做配置:
  • send_command(),send_config_set(),send_config_from_file()[1],详解见注释弈心老师讲解的通俗易懂

执行代码

验证结果

至此,实验2成功!


实验三 -lab3

实验目的

用Netmiko配合Textfsm或者Genie将回显内容以JSON格式输出,以pprint模块打印出来

参考

  1. ^Netmiko主要有四种函数向设备做配置:send_command(),send_config_set()以及send_config_from_file(),除此之外还有一个不太常用的send_command_timing(),它们的用法和区别如下: send_command():只支持向设备发送一条命令,通常是show/display之类的查询、排错命令或者wr mem这样保存配置的命令。发出命令后,默认情况下这个函数会一直等待,直到接收到设备的完整回显内容为止(以收到设备提示符为准,比如说要一直等到读取到“S1#"为止),如果在一定时间内依然没读到完整的回显内容,netmiko则会返回一个OSError: Search pattern never detected in send_command: xxxxx的异常。如果想要指定netmiko从回显内容中读到我们需要的内容,则需要用到expect_string参数(expect_string默认值为None),如果send_command()从回显内容中读到了expect_string参数指定的内容,则send_command()依然返回完整的回显内容,如果没读到expect_string参数指定的内容,则netmiko同样会返回一个OSError: Search pattern never detected in send_command: xxxxx的异常,关于expect_string参数的用法会在稍后的实验里演示。 send_config_set(): 向设备发送一条或多条配置命令,注意是配置命令,不是show/display之类的查询命令,因为send_config_set()本身会自动替我们加上一个config terminal命令进入配置模式(以及在命令末尾自动替我们加上一个end命令),在config terminal下除非在show命令前面加上一个do,比如do show ip int brief,否则show命令无效(以上以思科IOS设备为例)。send_config_set()一般配合列表使用。 send_config_from_file(): 在配置命令数量较多的时候,将所有配置命令写入列表显然是比较笨拙的,因为会造成代码过长,不方便阅读,并且在部分厂商的设备上(比如华为)还会出现超时报错的情况。我们可以先将所有的配置命令写入一个配置文件中,然后使用send_config_from_file()去读取该文件的内容帮助我们完成配置。和send_config_set()一样,send_config_from_file()也会自动帮我们添加config terminal和end两个命令,所以在我们的配置文件里无需加入这两个命令。 send_command_timing(): 和send_command()一样,只支持向设备发送一条show/display命令。区别是在用send_command()输入一条show命令后,send_command()会一直等待,直到接收到设备的完整回显内容为止(以收到设备提示符为准)。send_command_timing()则会自己去“猜”什么时候停止运行,它的原理是如果没有从设备收到更多新的回显内容后,它会继续等待2秒钟,然后自动停止运行,并且不会抛出任何异常。send_command_timing()里有一个叫做delay_factor的参数,默认为1,如果将它修改为2,则send_command_timing()会等待4秒钟,修改为3,则等待6秒,修改为4,等待8秒。。以此类推,因为send_command_timing()不会抛出OSError: Search pattern never detected in send_command: xxxxx这个异常,它是send_command()的一个良好的替代方案。有时候在输入show tech-support或者show log(logging buffer特别大,日志特别长的那种)这种回显内容巨多的命令时,即使输入了term len 0来取消分屏显示,设备在返回回显内容时依然会有停顿,有时停顿时间会大于2秒钟,这样就会导致截屏不完整,必须手动去调整delay_factor这个参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

paddle

paddle预测库 git config --global http.postBuffer 1048576000 git clone --recursive https://github.com/PaddlePaddle/Paddle.git 修改CMakeLists.txt mkdir build cd buildcmake -DWITH_CONTRIBOFF -DWITH_MKLOFF -DWITH_MKLDNNOFF -DWITH_TESTINGOFF -DCMAKE_BUILD_TY…

DBCO-PEG-Ferrocene,Ferrocene-PEG-DBCO,DBCO偶联修饰二茂铁

DBCO-PEG-Ferrocene ,Ferrocene-PEG-DBCO,二苯并环辛炔-聚乙二醇-二茂铁,DBCO偶联修饰二茂铁产品规格: 1.CAS号:N/A 2.分子量MV:1000、2000、3400、5000、10000、20000等可按需进行定制 3.包装规格&#xf…

数据结构与算法_空间复杂度

同时间复杂度一样,空间复杂度也是数学的函数表达式。 空间复杂度不是程序占用了多少 bytes的空间,因为这个也没太大意义,所以空间复杂度算的是运行的过程中临时的、额外的变量的个数。 空间复杂度计算规则基本跟实践 复杂度类似&#xff0c…

Flutter For App——一个简单的豆瓣APP

一个简单的豆瓣APP效果视频功能简述功能第三方库接口简述底部导航栏效果图实现初始化BottomNavigationBarItembottomNavigationBar切换页面导致bottomNavigationBar子页面重绘Top250榜单效果图实现Widget树FutureBuilder异常ListView上拉加载电影详情效果图实现高斯模糊网络数据…

设计模式原则 - 单一职责原则(一)

单一职责原则一 官方定义基本介绍二 案例演示普通方式实现解决方案解决方案一解决方案案例分析解决方案二解决方案案例分析案例总结三 注意事项&细节四 如何遵守单一职责原则?一 官方定义 单一职责原则(Single Responsibility Principle, SRP&#x…

用Spark写入Mysql的特别注意事项

相信有部分刚入门的小伙伴对于spark写入Mysql的过程不太熟悉。特意写一篇文章讲一下这个注意事项,以免“上大当” 我们先看一个小伙伴写的一段spark写入mysql的代码 public static void trans(SparkSession spark,String pro_table, String pro_url, String pro_dr…

微服务框架 SpringCloud微服务架构 服务异步通讯 52 惰性队列 52.1 消息堆积问题

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯52 惰性队列52.1 消息堆积问题52.1.1 消息堆积问题52 惰性队列 52.1 消息堆积问题 52.1.1 消…

11基于主从博弈理论的共享储能与综合能源微网优化运行研究(MATLAB程序)

参考文献: 基于主从博弈理论的共享储能与综合能源微网优化运行研究——帅轩越(2022电网技术) 主要内容; 代码主要做的是基于主从博弈理论的共享储能与综合能源微网优化运行研究,首先介绍了系统运行框架,分析了系统内…

一文了解各种高精度室内定位技术

在消费需求和创新技术驱动下,可穿戴设备和物联网产品的发展驶入了快车道,GNSS定位功能在无人驾驶、智能设备、资产追踪等日趋智能化中广泛应用,而随着万物互联时代的到临,物联网技术围绕人员、资产的室内位置服务需求也愈加强烈。…

vue使用

目录 路由History模式打包页面空白 项目放根目录 -- 配置 项目放二级目录 -- 配置 路由History模式打包页面空白 项目放根目录 -- 配置 router > index.js 修改 base const router new VueRouter({mode: history,// base: process.env.BASE_URL,base: /,routes, }) ngi…

【Redis集群专题】「集群技术三部曲」介绍一下常用的Redis集群机制方案的原理和指南(入门篇)

集群化的方案 Redis的Sentinel解决了主从复制故障不能自动迁移的问题,但是主节点的写性能和存储能力依然是受到了Redis单机容量有限的限制,所以使用Redis集群去解决这个问题,将Redis的数据根据一定的规则分配到多台机器。 Redis集群方案 R…

【git】

目录第一章 简介 1.1 版本控制 1.1.1 本地版本控制1.1.2 集中式版本控制1.1.3 分布式版本控制 第二章 基础篇 2.1 下载代码 2.2 更新代码 2.2.1 清空本地未被跟踪内容2.2.2更新代码使之与库上同步 2.3 修改 2.3.1 Vim2.3.2 Sed2.3.3 Awk 2.4 查看状态 2.5 保存代…

通俗易懂的java设计模式(3)-观察者设计模式

什么是观察者设计模式 观察者模式主要应用在对象存在一对多关系的情况下,那么如果一个对象,依赖于另一个对象,那个被依赖的对象一旦被修改,依赖于他的那个对象也会被观察者所告知。 观察者模式又被称作为发布-订阅模式&#xff0c…

2022 UUCTF

目录 <1> Web (1) websign(禁用js绕过) (2) ez_rce(?>闭合 rce) (3) ez_unser(引用传递) (4) ez_upload(apache后缀解析漏洞) (5) ezsql(union注入) (6) funmd5(代码审计 %0a绕过preg_replace) (7) phonecode(伪随机数漏洞) (8) ezpop(反序列化字符串逃逸) …

[附源码]Nodejs计算机毕业设计教师业绩考核和职称评审系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

[附源码]Nodejs计算机毕业设计教务管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

燃尽图——项目管理中的必备工具

燃尽图可以使项目经理和团队可以快速查看其工作负荷的进度以及项目按计划完成的情况。 在项目管理中&#xff0c;通过燃尽图不仅能了解项目进度&#xff0c;还能分析出项目中问题&#xff0c;及时进行风险控制。 燃尽图是用于表示剩余工作量的工作图表&#xff0c;由横轴&…

WebDAV之葫芦儿•派盘+RS文件管理器

RS文件管理器 支持WebDAV方式连接葫芦儿派盘。 手机本地文件,网盘、共享文件,如何集中管理?推荐您使用Rs文件管理器,还支持WebDAV等功能。 Rs文件管理器是一款功能强大的手机文件管理器。有强大的本地和网络文件管理功能,让您更方便的管理你的手机、平板、电脑和网盘。…

MOMO CODE SEC INSPECTOR-Java项目静态代码安全审计idea插件工具

工具地址 https://github.com/momosecurity/momo-code-sec-inspector-java安装 1、确认IDE版本&#xff1a;Intellij IDEA ( Community / Ultimate ) > 2018.32、IDEA插件市场搜索"immomo"安装。使用方式 被动&#xff1a;装完愉快的打代码&#xff0c;一边它会提…

AI作画的背后是怎么一步步实现的?一文详解AI作画算法原理+性能评测

前言 “AI作画依赖于多模态预训练&#xff0c;实际上各类作画AI模型早已存在&#xff0c;之所以近期作品质量提升很多&#xff0c;可能是因为以前预训练没有受到重视&#xff0c;还达不到媲美人类的程度&#xff0c;但随着数据量、训练量的增多&#xff0c;最终达到了现在呈现…