自己搭建自动化巡检系统(四) 处理邻居列表
2017-08-30 20:08
169 查看
通过之前的三次实验,我们已经可以初步的使用python通过telnet来操作cisco设备,接下来开始新一期的实验
实验目的:网络巡检,之后将信息存储在数据库中
本次实验需要再次拓展新的拓扑,,且实验环境改为ubuntu,后续的拓展将改为在linux环境下经行。本地地址使用10.10.10.142,通过两台管理交换机来控制六台路由器,其地址分配
![](https://s4.51cto.com/wyfs02/M02/A4/38/wKioL1mmp_SDWmeyAABD3ph49wQ660.jpg-wh_500x0-wm_3-wmp_4-s_2910963944.jpg)
为每台设备配置IP地址
由于需要批量配置,可以使用CRT的全局发送功能实现批量命令部署
![](https://s5.51cto.com/wyfs02/M00/A4/38/wKioL1mmp_SwgyQIAAAwlP7yVUY859.png-wh_500x0-wm_3-wmp_4-s_1226268452.png)
全部部署vty之后,开通三台设备以减少机器负担,后续再陆续开发
![](https://s5.51cto.com/wyfs02/M01/05/87/wKiom1mmqAjC3bMPAABDK2VivOs291.jpg-wh_500x0-wm_3-wmp_4-s_1462750356.jpg)
检验连通性
![](https://s2.51cto.com/wyfs02/M02/05/87/wKiom1mmqCmyWFr5AADnmhLp25w129.png)
发现邻居名单
![](https://s1.51cto.com/wyfs02/M01/A4/38/wKioL1mmqCaDZyLPAAA0DrXSEsw400.jpg)
检验代码的执行结果
![](https://s1.51cto.com/wyfs02/M02/05/87/wKiom1mmqDqwuyMsAABlYnOJpCU128.jpg)
接下来的任务是通过系统抓包,对这些数据包进行分析,我们的任务就是通过抓取cdp数据包的形式,记录邻居关系,如果发生邻居关系变动则发出告警信息。
这里说一下思路:获取接受的这串字符串,进行信息处理,即只收取:R1 Fas0/0 Fas0/0,并存入本地数据库中,因此需要在数据库中建立一张邻居表,存储路由器编号、本地接口号,对端接口号。这里安装两个数据库,存储在两个地方,一来是灾备,二来是为了之后做实验,测试关系型数据库和非关系型数据库的在运行效率上的不同。
第一步:截取信息
处理这串字符:
'show cdp neighbors\r\nCapability Codes: R- Router, T - Trans Bridge, B - Source Route Bridge\r\n S - Switch, H - Host, I -IGMP, r - Repeater\r\n\r\nDevice ID Local Intrfce Holdtme Capability Platform Port ID\r\nR1 Fas 0/0 172 R S I 3640 Fas 0/0\r\nR6 Fas0/0 144 R S I 3640 Fas 0/0\r\nR4 Fas0/0 170 R S I 3640 Fas 0/0\r\nR2>'
本次打算使用的字符串处理方法是进行切片,后续还可以尝试使用类似正则表达式的方法
![](https://s1.51cto.com/wyfs02/M00/A4/38/wKioL1mmqFrSHb8FAAA7cgG3E9Y566.jpg-wh_500x0-wm_3-wmp_4-s_1629393673.jpg)
等待2秒是需要接收设备返回的邻居信息
![](https://s1.51cto.com/wyfs02/M02/05/87/wKiom1mmqIKzIESPAABad2iXjTc551.jpg-wh_500x0-wm_3-wmp_4-s_3015830692.jpg)
处理完成,美滋滋
![](https://s3.51cto.com/wyfs02/M00/05/87/wKiom1mmqJDgaxNLAAA2cm92V5E186.jpg)
第二步:设计关系表,并建表
设计mysql
Database:NDB
Table:cdp_nei
这里已经在mysql中的ndb里面建立一张表,存储的是cdp邻居的信息,基于当前的拓扑,可以预见当所有路由器运行之后,表中的信息条目应该是6*7=42
![](https://s3.51cto.com/wyfs02/M01/05/87/wKiom1mmqLTig-DJAAAWNmYJNu0499.jpg)
First_record用于记录首次记录这个数据项的时间,Change_record则会自动记录每次修改这个数据项的时间,在查询的时候,可以通过查看修改数据项的时间,如果发生改变就可以直接提示这条链路发生抖动
第三步:写入数据库中
我们在调试界面试一下该命令可以通过
![](https://s2.51cto.com/wyfs02/M00/05/87/wKiom1mmqM-gfgB9AAAot2DaMWc617.jpg-wh_500x0-wm_3-wmp_4-s_4074169780.jpg)
查看效果
![](https://s1.51cto.com/wyfs02/M00/A4/38/wKioL1mmqM7SKSIyAABuLoXybok201.jpg-wh_500x0-wm_3-wmp_4-s_4213160196.jpg)
好了之后可以在代码中写入相关指令,不过在这之前,先做一件刺激的事儿,先衫裤再跑路!
![](https://s2.51cto.com/wyfs02/M00/A4/38/wKioL1mmqOCS6uKMAAAZhF5p1d0149.jpg)
代码:
这个是初始版本,后续为了开发方便封装在一个单独的类里面的
![](https://s4.51cto.com/wyfs02/M01/A4/38/wKioL1mmqPvQ015wAAAWXceTf_8218.png)
写完之后记得同步数据才可以在数据库中查看到相关信息
![](https://s4.51cto.com/wyfs02/M02/05/87/wKiom1mmqSGy86gYAAAjoie2lZ4005.jpg)
写入成功,美滋滋啊
![](https://s5.51cto.com/wyfs02/M01/A4/38/wKioL1mmqRyg2hnQAAAb0zkr2Ik934.png)
第四步:遍历所有设备的邻居信息
思路:依次telnet登录每台设备,对其使用show cdp nei,然后收集对端端口信息,写入数据库中
![](https://s1.51cto.com/wyfs02/M00/05/87/wKiom1mmqUOgNkXRAAE51oBIkJM246.jpg)
这里就可以动态的将信息存储在数据库中,下个实验我们将通过编写脚本,将出错的信息告警
关于python-mysql的安装教程以及mysqldb这个工具包的使用笔记在评论中的连接
实验目的:网络巡检,之后将信息存储在数据库中
本次实验需要再次拓展新的拓扑,,且实验环境改为ubuntu,后续的拓展将改为在linux环境下经行。本地地址使用10.10.10.142,通过两台管理交换机来控制六台路由器,其地址分配
R1 | 10.10.10.101 |
R2 | 10.10.10.102 |
R3 | 10.10.10.103 |
R4 | 10.10.10.104 |
R5 | 10.10.10.105 |
R6 | 10.10.10.106 |
![](https://s4.51cto.com/wyfs02/M02/A4/38/wKioL1mmp_SDWmeyAABD3ph49wQ660.jpg-wh_500x0-wm_3-wmp_4-s_2910963944.jpg)
为每台设备配置IP地址
由于需要批量配置,可以使用CRT的全局发送功能实现批量命令部署
![](https://s5.51cto.com/wyfs02/M00/A4/38/wKioL1mmp_SwgyQIAAAwlP7yVUY859.png-wh_500x0-wm_3-wmp_4-s_1226268452.png)
全部部署vty之后,开通三台设备以减少机器负担,后续再陆续开发
![](https://s5.51cto.com/wyfs02/M01/05/87/wKiom1mmqAjC3bMPAABDK2VivOs291.jpg-wh_500x0-wm_3-wmp_4-s_1462750356.jpg)
检验连通性
![](https://s2.51cto.com/wyfs02/M02/05/87/wKiom1mmqCmyWFr5AADnmhLp25w129.png)
发现邻居名单
![](https://s1.51cto.com/wyfs02/M01/A4/38/wKioL1mmqCaDZyLPAAA0DrXSEsw400.jpg)
检验代码的执行结果
![](https://s1.51cto.com/wyfs02/M02/05/87/wKiom1mmqDqwuyMsAABlYnOJpCU128.jpg)
接下来的任务是通过系统抓包,对这些数据包进行分析,我们的任务就是通过抓取cdp数据包的形式,记录邻居关系,如果发生邻居关系变动则发出告警信息。
这里说一下思路:获取接受的这串字符串,进行信息处理,即只收取:R1 Fas0/0 Fas0/0,并存入本地数据库中,因此需要在数据库中建立一张邻居表,存储路由器编号、本地接口号,对端接口号。这里安装两个数据库,存储在两个地方,一来是灾备,二来是为了之后做实验,测试关系型数据库和非关系型数据库的在运行效率上的不同。
第一步:截取信息
处理这串字符:
'show cdp neighbors\r\nCapability Codes: R- Router, T - Trans Bridge, B - Source Route Bridge\r\n S - Switch, H - Host, I -IGMP, r - Repeater\r\n\r\nDevice ID Local Intrfce Holdtme Capability Platform Port ID\r\nR1 Fas 0/0 172 R S I 3640 Fas 0/0\r\nR6 Fas0/0 144 R S I 3640 Fas 0/0\r\nR4 Fas0/0 170 R S I 3640 Fas 0/0\r\nR2>'
本次打算使用的字符串处理方法是进行切片,后续还可以尝试使用类似正则表达式的方法
![](https://s1.51cto.com/wyfs02/M00/A4/38/wKioL1mmqFrSHb8FAAA7cgG3E9Y566.jpg-wh_500x0-wm_3-wmp_4-s_1629393673.jpg)
等待2秒是需要接收设备返回的邻居信息
![](https://s1.51cto.com/wyfs02/M02/05/87/wKiom1mmqIKzIESPAABad2iXjTc551.jpg-wh_500x0-wm_3-wmp_4-s_3015830692.jpg)
处理完成,美滋滋
![](https://s3.51cto.com/wyfs02/M00/05/87/wKiom1mmqJDgaxNLAAA2cm92V5E186.jpg)
第二步:设计关系表,并建表
设计mysql
Database:NDB
Table:cdp_nei
RID | Char |
Local_Int | Char |
Port_ID | Char |
First_record | Datetime |
Change_record | Datetime |
![](https://s3.51cto.com/wyfs02/M01/05/87/wKiom1mmqLTig-DJAAAWNmYJNu0499.jpg)
First_record用于记录首次记录这个数据项的时间,Change_record则会自动记录每次修改这个数据项的时间,在查询的时候,可以通过查看修改数据项的时间,如果发生改变就可以直接提示这条链路发生抖动
第三步:写入数据库中
我们在调试界面试一下该命令可以通过
![](https://s2.51cto.com/wyfs02/M00/05/87/wKiom1mmqM-gfgB9AAAot2DaMWc617.jpg-wh_500x0-wm_3-wmp_4-s_4074169780.jpg)
查看效果
![](https://s1.51cto.com/wyfs02/M00/A4/38/wKioL1mmqM7SKSIyAABuLoXybok201.jpg-wh_500x0-wm_3-wmp_4-s_4213160196.jpg)
好了之后可以在代码中写入相关指令,不过在这之前,先做一件刺激的事儿,先衫裤再跑路!
![](https://s2.51cto.com/wyfs02/M00/A4/38/wKioL1mmqOCS6uKMAAAZhF5p1d0149.jpg)
代码:
这个是初始版本,后续为了开发方便封装在一个单独的类里面的
![](https://s4.51cto.com/wyfs02/M01/A4/38/wKioL1mmqPvQ015wAAAWXceTf_8218.png)
写完之后记得同步数据才可以在数据库中查看到相关信息
![](https://s4.51cto.com/wyfs02/M02/05/87/wKiom1mmqSGy86gYAAAjoie2lZ4005.jpg)
写入成功,美滋滋啊
![](https://s5.51cto.com/wyfs02/M01/A4/38/wKioL1mmqRyg2hnQAAAb0zkr2Ik934.png)
第四步:遍历所有设备的邻居信息
思路:依次telnet登录每台设备,对其使用show cdp nei,然后收集对端端口信息,写入数据库中
![](https://s1.51cto.com/wyfs02/M00/05/87/wKiom1mmqUOgNkXRAAE51oBIkJM246.jpg)
这里就可以动态的将信息存储在数据库中,下个实验我们将通过编写脚本,将出错的信息告警
关于python-mysql的安装教程以及mysqldb这个工具包的使用笔记在评论中的连接
相关文章推荐
- 自己搭建自动化巡检系统(四) 处理邻居列表
- 自己搭建自动化巡检系统(五) 抖动告警
- 自己搭建自动化巡检系统(二) telnet远程登录
- 自己搭建自动化巡检系统(五) 抖动告警
- 自己搭建自动化巡检系统(三) 通过telnet实现远程创建loopback
- 自己搭建自动化巡检系统(三) 通过telnet实现远程创建loopback
- 自己搭建自动化巡检系统(一) 环境准备系统连接gns3
- 自己搭建自动化巡检系统(二) telnet远程登录
- [置顶] 自己动手写操作系统:3.搭建虚拟机并验证系统bootloader
- 用Bluemix虚拟机搭建自己的博客系统
- 快速搭建自己的物联网平台,zigbee协议(不会控制你的物联网系统)
- 自动化运维之系统篇:cobbler批量安装系统主机搭建
- 针对android 异常反馈处理系统搭建
- eclipse+maven搭建自己web系统的骨架,解决自带骨架加载无限慢的问题
- iOS 即时通讯SDK的集成,快速搭建自己的聊天系统
- 搭建服务器处理系统(基于netty)-我们到底能走多远系列(25)
- Android 分享功能(一)添加自己应用到系统分享列表
- git文件更新列表中,出现了不是自己更改的文件,如何处理
- flume+kafka+spark streaming日志流式处理系统搭建实验
- 基于Java设计和实现系统的自动化巡检