netmiko概述:

netmiko作为paramiko的高级封装,目的是简化各种网络供应商和平台之间的比较低效SSH(也支持telnet)管理。

netmiko基础代码和支持的设备可以参考:
https://blog.csdn.net/tushanpeipei/article/details/113704076?spm=1001.2014.3001.5501

textfsm概述:

textfsm作为开源python库,可以通过自定义模板的方式,将网络设备输出的格式按照给定的模板输出,例如使用netmiko在cisco交换机上使用命令:show ip interfcae brief,可以得到如下的字符串信息:

CSR1000v#show ip interface brief
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       192.168.0.66    YES NVRAM  up                    up
GigabitEthernet2       10.1.1.1        YES NVRAM  up                    up
GigabitEthernet3       unassigned      YES NVRAM  administratively down down
Loopback0              1.1.1.1         YES NVRAM  up                    up
VirtualPortGroup0      30.1.1.254      YES NVRAM  up                    up

处理字符串中的相关信息,我们第一时间可以想到的是使用正则表达式。但是正则表达式常常令人头疼,面对复杂的匹配要求时对使用人的熟练度要求较高。

使用textfsm的模板分析输出信息后,可以将回显信息整理为json的格式,方便python进行处理:

  {"intf": "GigabitEthernet1","ipaddr": "192.168.0.77","status": "up","proto": "up"},{"intf": "GigabitEthernet2","ipaddr": "10.1.1.2","status": "up","proto": "up"},{"intf": "GigabitEthernet3","ipaddr": "unassigned","status": "administratively down","proto": "down"},{"intf": "Loopback0","ipaddr": "2.2.2.2","status": "up","proto": "up"}

但是,仅仅使用textfsm,面对不同厂商,不同操作系统的回显信息,如果都由我们手工编写模板,则显得过于笨重和浪费时间。这时候就需要一个模板集来帮助我们将各种设备的回显信息转换为python容易处理的数据格式(XML、JSON、YAML)。这三种数据格式介绍可以参考:
https://blog.csdn.net/tushanpeipei/article/details/116883378?spm=1001.2014.3001.5501

ntc-templates概述:

ntc-templates作为一个textfsm的模板集,对绝大多数主流厂商(非国内)都有这比较好的支持性,特别是对于Cisco的设备。目前ntc-templates模板如下:

比较可怜的是,ntc-templates目前仅支持4个华为设备的模板。

测试实验:

实验目的:
通过netmiko&textfsm&ntc-templates获取设备接口为UP的信息和获取OSPF路由信息。

实验环境:
两台已经配置完成SSH的CSR1000v,IP地址分别为192.168.0.66、192.168.0.77。

步骤一: 安装netmiko、textfsm和ntc-templates

netmiko和textfsm直接使用pip3安装即可。

ntc-templates安装步骤如下:

  1. 在根目录下创建ntc-template目录,移动到创建好的ntc-template文件夹下,执行如下命令下载ntc-template.git文件。

    git clone https://github.com/networktocode/ntc-templates.git
    
  2. 设置环境变量,方便netmiko调用模板:

    export NET_TEXTFSM='/ntc-template/ntc-templates/templates'
    

注意:ntc-templates不能直接在windows下使用。

步骤二: 使用netmiko&textfsm&ntc-templates将路由器show相关信息转换为json字符串格式,方便后续分析:

from netmiko import ConnectHandler
import jsonCSR1 = {'device_type': 'cisco_ios','ip': '192.168.0.66','username': 'prin','password': 'Cisc0123',
}CSR2 = {'device_type': 'cisco_ios','ip': '192.168.0.77','username': 'prin','password': 'Cisc0123',
}CSR_Group = [CSR1, CSR2]for device in CSR_Group:# 避免有连接不上的设备,使用异常处理机制try:# 依次连接每一个设备connect = ConnectHandler(**device)# 通过textfsm模板对接口信息进行分析interfaces = connect.send_command('show ip int brief', use_textfsm=True)print(json.dumps(interfaces, indent=2))# 通过textfsm模板对路由条目进行分析route = connect.send_command('show ip route', use_textfsm=True)print(json.dumps(route, indent=2))except Exception as e:print(e)

测试结果如下(部分截图):

步骤三: 根据打印出的json字符串,组织分析字典信息,得到需要的接口和路由信息:

from netmiko import ConnectHandler
import jsonCSR1 = {'device_type': 'cisco_ios','ip': '192.168.0.66','username': 'prin','password': 'Cisc0123',
}CSR2 = {'device_type': 'cisco_ios','ip': '192.168.0.77','username': 'prin','password': 'Cisc0123',
}CSR_Group = [CSR1, CSR2]for device in CSR_Group:# 避免有连接不上的设备,使用异常处理机制try:# 依次连接每一个设备connect = ConnectHandler(**device)print('*' * 50, f"{device['ip']}状态为UP的接口", '*' * 50)# 通过textfsm模板对接口信息进行分析interfaces = connect.send_command('show ip int brief', use_textfsm=True)# print(json.dumps(interfaces, indent=2))# 根据打印出的json格式信息,输出状态是UP的接口。每个interface是一个字典。for interface in interfaces:if interface["status"] == 'up':print(f'{interface["intf"]} is up!  IP address: {interface["ipaddr"]}')# 通过textfsm模板对路由条目进行分析print('*' * 50, f"{device['ip']}OSPF的路由信息", '*' * 50)route = connect.send_command('show ip route', use_textfsm=True)# print(json.dumps(route, indent=2))# 根据打印出的json格式信息,输出是OSPF的路由信息for ospf_route in route:if ospf_route['protocol'] == ('O' or 'IA' or 'N1' or 'N2' or 'E1' or 'E2'):print(f"OSPF路由:network {ospf_route['network']}/mask {ospf_route['mask']} nexthop_ip {ospf_route['nexthop_ip']}")except Exception as e:print(e)

测试结果:

参考资料来源:
《网络工程师的python之路》:https://www.zhihu.com/people/wang-yin-31-84/posts?page=2
NetDevOps加油站:https://zhuanlan.zhihu.com/p/163534748

网工界的TFBOYS——netmikotextfsmntc-templates快速入门相关推荐

  1. python爬虫慕课网利用xpath_python爬虫实践——零基础快速入门(二)爬取豆瓣电影...

    爬虫又称为网页蜘蛛,是一种程序或脚本. 但重点在于,它能够按照一定的规则,自动获取网页信息. 爬虫的基本原理--通用框架 1.挑选种子URL: 2.讲这些URL放入带抓取的URL列队: 3.取出带抓取 ...

  2. 做网工10年,没人在30岁前和我讲这些(一)

    晚上好,我是老杨. 23年才刚过几天,我就感觉自己又上了点年纪,时常面对年纪比较小的粉丝,无意识的面露慈爱的笑容. 还是每次小冬提醒我,我才发现我的表情不对劲. 我对年轻人的包容度是很强的,尤其是一毕 ...

  3. Bootstrap学习笔记01【快速入门、栅格布局】

    Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...

  4. python内存管理 变量无需事先声明_Python 快速入门

    一团网资讯 一团资讯 > python > Python 快速入门 Python 快速入门 2017-11-09 03:01:22     发布者:来源网络 1.Python语句中一些基本 ...

  5. 屏通触摸屏软件操作手册_屏通人机界面软件操作手册快速入门版.pdf

    屏通人机界面软件操作手册快速入门版 PM Designer 触控大师 屏 通 人 机 界 面 软件操作手册 快速入门版 0 目 录 第一章 PM Designer触控大师软件简介3 1.1 软件功能介 ...

  6. mxnet快速入门教程值NDArray(一)

    前言 由于最近需要用到mxnet,所以准备结合mxnet官网教程,写一系列mxnet的快速入门教程.通过一系列文章你将能够快速掌握mxnet的核心NDArray和Gluron以及灵活利用mxnet来构 ...

  7. ftp协议是一种用于_______的协议_网工知识角|快速理解FTP和TFTP的区别,实用收藏...

    点上方蓝字关注公众号,坚持每天技术打卡 学网络,就在IE-LAB 国内最著名的高端网络工程师培养基地 FTP和TFTP的区别是什么 CCNA零基础入门必学 FTP(FileTransfer Proto ...

  8. 【网工必备知识】IGMP协议,5分钟快速了解!

    1.什么是IGMP? IGMP因特网组网协议,主要是用于组播使用,主机可以通过IGMP告诉路由器想接收或离开某个网络组播的信息. 2.为什么需要组播? 像传统的单播,和广播都有其缺陷,如单播的方式会使 ...

  9. ipsec协议_网工知识角轻松学网络|三分钟了解PPPOE协议

    学网络,就在IE-LAB 国内高端网络工程师培养基地 PPPOE( Point-to-PointProtocol Over Ethernet)以太网上的点对点协议,是将点对点协议(PPP)封装在以太网 ...

  10. 网工路由基础(6)BGP协议

    往期回顾 网工路由基础(1)静态路由 网工路由基础(2)路由选路原理 网工路由基础(3)RIP原理与配置 网工路由基础(4)EIGRP协议 网工路由基础(5)ISIS协议 作为运行全球互联网的路由协议 ...

最新文章

  1. JavaScript之继承模式,命名空间,对象枚举
  2. linux内核实现ipsec,IP XFRM配置示例:利用linux kernel自带的IPSec实现,手动配置IPSec...
  3. [Oracle]Sqlplus 中使用 new_value
  4. python窗口图形界面编程上传图片_python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例...
  5. Q104:怎么用ray tracing画基于磨边楔形的“花环(Rosette)”
  6. 如何使用初始化列表消除冗余C++代码
  7. 通过一个备份归档的脚本演示rsync限速和find如何删除文件
  8. Cadence OrCAD Capture 锁定工程和图纸图文视频教程
  9. 方舟原始恐惧mod生物代码_方舟:生存进化新手攻略
  10. ajax里的data的用法,Jquery中ajax方法data参数的用法
  11. 举例一种计算机病毒,电脑病毒介绍及举例
  12. win10下 你需要来自trustedinstaller的权限 修改权限
  13. python 区块链_如何用Python快速实现区块链?
  14. 中英文数字混合字符串排序js
  15. 华为服务器BMC方式安装系统-官方文档解读
  16. 防火墙区域及工作模式
  17. 用户登录,并验证验证码以及密码
  18. 从语音信号处理角度解读mic规格书
  19. 学生考试作弊行为视频实时检测系统源码
  20. 5月10日云栖精选夜读:阿里专家直击前端盛会JSConf2017 Day2:见证Moment.js精彩分享...

热门文章

  1. 机器学习基础算法28-EM算法
  2. 我终于知道,中国互联网是怎么弯道超车,干翻美国了
  3. 揭秘Spark应用性能调优
  4. 应用系统接入接口开发
  5. 《海量数据库解决方案》之位图索引的结构和特征
  6. 机器学习实战系列(六):Adaboost提升法
  7. centos yum源_Linux入门珍藏课件系列第一讲:YUM源(图文)
  8. linux下下载fnl数据,NCEP再分析资料FNL数据在windows平台用cygwin批量下载方法
  9. vmware屏幕不能适应窗口
  10. MSP430使用__delay_cycles实现延时1ms和1us