文档章节

H3C和Cisco的无线设备自动监测和重启

运维技术
 运维技术
发布于 2015/11/05 18:27
字数 1533
阅读 520
收藏 4
点赞 0
评论 0

背景:    前一段时间公司的购置了一批企业级的无线AP,由于使用人数太多,运行一段时间后发现,无线还是经常掉线或者无法连上网络(有线不会出现这样的问题),这时候我们会对无线设备进行重启,重启之后设备恢复正常,无线网络也恢复ok,由此萌生想用自动化的方式对无线设备进行监控和自动定期对无线设备重启来保持无线网络的稳定。

          

无线设备型号H3C WA2620i-AGN 和 Cisco Aironet 1240AG 

目的:  1.自动监测无线设备的运行情况,当监测到无线设备不能连接到外网或者延迟很高时,重启无线设备。

          2.每天中午12:30和下午18:30 定期对无线设备进行重启

思路:   核心就是模拟手工登陆无线设备,运行相关无线设备的命令,去判断无线设备的运行情况,来实现自动监测和重启,核心方式使用shell的expect函数,为什么使用shell,而不使用其他语言比如python,是因为它能快速的完成这个功能。

上图-> 自动重启无线设备图(H3C和Cisco

上图-> 自动监测无线设备图(H3C和Cisco )-->丢包正常图(模拟登陆无线设备ping外网地址,延迟正常则无需重启等动作)

Cisco

H3C


上图-> 自动监测无线设备图(H3C和Cisco )-->丢包不正常图(模拟登陆无线设备ping外网地址,延迟不正常则需重启)

Cisco


H3C

代码如下:

#!/bin/bash
#author: GaoMing
#date: 2015-11-02
#qq: 530035210
#blog: http://my.oschina.net/pwd/blog 
# 无线设备定期重启和自动监测
 
logdir=/data/log/shell          #日志路径
log=$logdir/log.log            #日志文件 
is_font=1                #终端是否打印日志: 1打印 0不打印 
is_log=1                 #是否记录日志: 1记录 0不记录
pingDes="223.5.5.5"
#pingDes="8.8.8.8"

datef(){
date "+%Y-%m-%d %H:%M:%S"
}
  
print_log(){
if [[ $is_log -eq 1  ]];then
[[ -d $logdir ]] || mkdir -p $logdir
echo "[ $(datef) ] $1" >> $log
fi
if [[ $is_font -eq 1  ]];then
echo -e "[ $(datef) ] $1"
fi
}

#H3C无线自动执行命令
#$1:无线IP,$2:无线账号,$3:无线密码,$4:要执行的命令 
runH3C()
{
         expect -c "
                spawn /usr/bin/telnet  $1  23
                set timeout -1
                expect \"\*Username\*:\"
                send \"$2\r\"
		expect \"\*Password\*:\"
                send \"$3\r\"
                expect \"\*\>\"
                send \"$4 \r\"
                expect \"\*\>\"
                send \"quit\r\"
                expect eof 
                  "
}

#H3c无线重启
runH3cReboot()
{
         expect -c "
                spawn /usr/bin/telnet  $1  23
                set timeout -1
                expect \"\*Username\*:\"
                send \"$2\r\"
                expect \"\*Password\*:\"
                send \"$3\r\"
                expect \"\*\>\"
                send \"$4 \r\"
                expect \"\*\:\"
                send \"Y\r\"
                expect eof 
                  "

}


#Cisco无线自动执行命令
#$1:无线IP,$2:无线账号,$3:无线密码,$4:要执行的命令
runCisco()
{
         expect -c "
                spawn /usr/bin/telnet  $1  23
                set timeout -1
                expect \"\*Username\*:\"
                send \"$2\r\"
                expect \"\*Password\*:\"
                send \"$3\r\"
                expect \"\*\#\"
                send \"$4 \r\"
                expect \"\*\#\"
                send \"quit\r\"
                expect eof 
                  "
}

#Cisco无线重启
runCiscoReload()
{
         expect -c "
                spawn /usr/bin/telnet  $1  23
                set timeout -1
                expect \"\*Username\*:\"
                send \"$2\r\"
                expect \"\*Password\*:\"
                send \"$3\r\"
                expect \"\*\#\"
                send \"$4 \r\"
                expect \"\*\]\"
                send \"\r\"
                expect eof 
                  "
}

#整合H3C和Cisco无线自动执行
#$1:无线设备类型 $2:无线IP,$3:无线账号,$4:无线密码,$5:要执行的命令
runWirelessAction()
{
print_log "\t-----Start-----"
int=1
while (( $int <= $# ))
do

eval i=\$$int
if [[ $i == ""    ]];then
print_log "$FUNCNAME():参数(第$int个)为空,退出."
exit
fi

let "int++"
done

print_log "$FUNCNAME():检测IP($3)($2)是否存在..."
pingIP=$(ping -c 3 $3  |grep "3 received" |wc -l)
if [[ $pingIP -eq 0  ]];then
print_log "$FUNCNAME():$3无线的IP不存在或者宕机了,退出当前函数."
return
else
print_log "$FUNCNAME():检测IP完成."
fi

case $1 in
"restart")
    case $2 in
        "cisco")
        	print_log "$FUNCNAME():开始重启无线思科设备..."
        	reloadStr=$(runCiscoReload "$3" "$4" "$5" "$6")
        	reloadStrResult=$(echo "$reloadStr"|grep "closed" |wc -l)
        	if [[ $reloadStrResult -eq 1  ]];then
        		print_log "$FUNCNAME(): IP为:$3的无线设备正在重启..."
        		print_log "$FUNCNAME(): 设备返回的信息如下:\n\r$reloadStr"
        	else
        		print_log "$FUNCNAME(): IP为:$3的无线设备重启异常 \n\r return code:$reloadStrResult \n\r return Str:$reloadStr"
        	fi
        	print_log "$FUNCNAME():重启无线思科设备完成"
        ;;
        "h3c")
                print_log "$FUNCNAME():开始重启无线H3c设备..."
        	runH3cReboot  "$3" "$4" "$5" "$6" > /tmp/rebootStr.txt &
        	sleep 5
        	rebootStr=$(cat /tmp/rebootStr.txt)
                rebootStrResult=$(cat /tmp/rebootStr.txt|grep "Continue" |wc -l)
                if [[ $rebootStrResult -eq 1  ]];then
                        print_log "$FUNCNAME(): IP为:$3的无线设备正在重启..."
                        print_log "$FUNCNAME(): 设备返回的信息如下:\n\r$rebootStr"
                else
                        print_log "$FUNCNAME(): IP为:$3的无线设备重启异常 \n\r return code:$rebootStrResult \n\r return Str:$rebootStr"
                fi
                print_log "$FUNCNAME():重启无线H3c设备完成"
        ;;
        *)
        print_log "$FUNCNAME():暂不支持其他设备."
        ;;
    esac

;;
"run")
	case $2 in
	   "cisco")
		print_log "$FUNCNAME():开始操作无线思科设备($3)..."
	        print_log "$FUNCNAME():开始在该设备执行命令($6)..."
        	runReStr=$(runCisco "$3" "$4" "$5" "$6")
		returnPercent=$(echo $runReStr |grep "percent" |awk -F'percent' '{print $1}' |awk '{ print $NF}')
		print_log "$FUNCNAME():设备返回的信息如下:\n\r $runReStr"
		print_log "$FUNCNAME():ping包返回的成功百分比(5个包): $returnPercent%"
		if [[ $returnPercent -lt 50  ]];then
			print_log "$FUNCNAME():该无线设备的丢包率大于50%,开始重启该设备."
			runWirelessAction "restart" "cisco" "$3" "$4" "$5" "reload"
		fi 
        	print_log "$FUNCNAME():执行命令完成"
		;;
	   "h3c")
		print_log "$FUNCNAME():开始操作H3c设备($3)..."
	        print_log "$FUNCNAME():开始在该设备执行命令($6)..."
        	runReStr=$(runH3C "$3" "$4" "$5" "$6")
		returnPercent=$(echo "$runReStr" |grep "loss" |awk -F'.' '{print $1}')
		print_log "$FUNCNAME():ping包的丢包率(5个包):$returnPercent%"
		print_log "$FUNCNAME():设备返回的信息如下:\n\r $runReStr"
		if [[ $returnPercent -gt 50  ]];then
			print_log "$FUNCNAME():该无线设备的丢包率大于50%,开始重启该设备."
			runWirelessAction "restart" "h3c" "$3" "$4" "$5" "reboot"
		fi 
        	print_log "$FUNCNAME():执行命令完成"

		;;
	esac
;;
*)
	print_log "$FUNCNAME():暂不支持其他类型无线AP或参数."
;;
esac
}
#自动监测和重启
#runWirelessAction "run" "cisco" "10.2.1.111" "admin" "password" "ping $pingDes"
#runWirelessAction "run" "h3c" "10.2.1.112" "admin" "password" "ping $pingDes"
#重启
#runWirelessAction "restart" "cisco" "10.2.1.111" "admin" "password" "reload"
#runWirelessAction "restart" "h3c" "10.2.1.111" "admin" "password" "reboot"

   自动监测和定期重启直接加入crontab即可使用


© 著作权归作者所有

共有 人打赏支持
运维技术
粉丝 95
博文 95
码字总数 101333
作品 1
广州
部门经理
经典案例:H3C校园网双出口配置

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一、案例分析 本案例以某高校的校园网出口为例,来展示NAT及策略...

Mr大表哥 ⋅ 2017/05/31 ⋅ 0

H3C S7500E系列高端多业务路由交换机

H3C S7500E系列高端多业务路由交换机 H3C S7500E系列产品是杭州华三通信技术有限公司(以下简称H3C公司)面向融合业务网络的高端多业务路由交换机,该产品基于H3C自主知识产权的Comware V5/...

yuanwx0328 ⋅ 2017/11/23 ⋅ 0

网络备份工具--netbackup-tool

使用php做得一个用于备份h3c和cisco网络设备的配置的工具。简介: 本程序包括二个主要的备份程序h3c.php和cisco.php。 h3c.exe程序模拟ftp客户端将csv配置文件中列出的h3c.设备中的配置文件下...

匿名 ⋅ 2010/03/08 ⋅ 0

[信息图表]关于物的互联网

2008 年,连接到互联网的设备已经超过了人类的数量。随着移动互联网的发展,与互联网相连的物品数量更是急速上涨,Cisco 的一副信息图展示了与互联网关联的物品之增长。 到 2020 年,连接到互...

老枪 ⋅ 2011/07/18 ⋅ 9

交换机配置备份脚本

一、脚本介绍 1.本文的自动配置备份脚本是通过BAT脚本自动运行CRT-登录交换机-查看当前配置-记录会话-保存会话的方式实现的。 2.本方法需要把以下4个文件要放置在同一目录下: (1)配置备份....

飞奔的鱼儿 ⋅ 2017/09/12 ⋅ 0

H3C MSR36路由器重装系统

一台H3C MSR36系列的路由器开机后停留在 提示符下,似乎是不能运行启动软件包了。重启后按Ctrl+B进入BOOT ROM菜单,进入文件系统查看CF卡的内容,貌似启动软件包名称上有些混乱,原因未知(意...

netside ⋅ 2014/12/06 ⋅ 0

一次arp防护配置错误导致的故障

故障描述,客户那里能够获得ip地址和dns等信息,但上不了网。三层核心是思科6509,二层设备是华三5130。 处理过程,由于dhcp信息能够获得证明二层是通的,cisco6509上分配ip等信息,查看相关...

古老 ⋅ 2017/08/25 ⋅ 0

十个网络优化改造案例之五 NAS区域网络第二次改造

主要内容及技术 使用三层接口规避广播风险 OSPF路由过滤技术 前言 一个大型企业网络的架构一般分为:接入层、汇聚层、核心层。从接入层到汇聚层可以采用VLAN、Trunk透传的方式,但是如果这个...

wzjxzht ⋅ 2017/08/07 ⋅ 0

新华三“多面手” MSG360让春节网络“不打烊”

春节假期即将来临,大家纷纷开始假期安排,许多人也将踏出探亲、旅游的步伐,正可谓“人未动,心已远”。 但对于服务行业而言,春节假期却并非意味着休息,坚守岗位、加班是假期的常态,尤其...

玄学酱 ⋅ 04/20 ⋅ 0

买会员卡送豪华超值大礼包

今天是最值得庆贺的一个好日子,因为许多朋友热切期待的,我在51CTO学院上的终身会员卡终于正式上线了!! 终身会员卡地址:http://edu.51cto.com/member/id-9.html 视频课程主心:http://ed...

茶乡浪子 ⋅ 2014/07/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 52分钟前 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部