文档章节

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

运维技术
 运维技术
发布于 2015/11/05 18:27
字数 1533
阅读 529
收藏 4

背景:    前一段时间公司的购置了一批企业级的无线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即可使用


© 著作权归作者所有

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

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

Mr大表哥
06/28
0
0
网络备份工具--netbackup-tool

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

匿名
2010/03/08
1K
0
H3C S7500E系列高端多业务路由交换机

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

yuanwx0328
2017/11/23
0
0
[信息图表]关于物的互联网

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

老枪
2011/07/18
823
9
交换机配置备份脚本

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

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

没有更多内容

加载失败,请刷新页面

加载更多

Cointext在阿根廷和土耳其推出比特币现金短信钱包

Cointext于10月15日开始在土耳其和阿根廷提供新的基于SMS的比特币现金钱包服务,这两个国家的加密货币使用量急剧上升,以应对严峻的经济形势。 移动钱包 通过短信处理BCH交易 “比特币是更好...

lpy411
5分钟前
0
0
大数据早课-0918

9.18日早课 1.全局搜索含有abc的文件名称或文件夹的命令 2.当前目录一般用什么表示 3.切换到上一次和上一层命令分别是什么 4.pwd是查看当前目录的什么 5.隐藏文件或文件夹的标识是什么? 怎样...

hnairdb
5分钟前
0
0
mybatis学习笔记一

一、mybaits需要的项目依赖 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artif......

wuyiyi
6分钟前
0
0
CentOS6 安装 GraphicsMagick

1.安装相关依赖: yum install -y gcc libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel 2.下载并解压到目录/usr/local/ wget ft......

凯文加内特
8分钟前
0
0
RabbitMq集群使用Nginx做负载均衡

1.配置rabbitmq集群(可以参考前一篇RabbitMq之部署集群) 2.Nginx做负载均衡 注意:Nginx1.90版本后 新增了stream 模块用于一般的 TCP 代理和负载均衡,之前版本不支持 修改Nginx配置文件ngi...

zhaochaochao
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部