解析dns判断ip是否可用后更新到host的shell

2018年10月18日 0 条评论 1.41k 次阅读 0 人点赞
#!/bin/bash
#获取当前解析的ip
nowip=`grep api.douban.com /etc/hosts |awk -F ' ' '{print $1}'`
#获取当前服务器ip
local_ip=$(ifconfig eth6 |grep 'inet addr' | awk -F '[ :]+' '{print $4}')
#echo ${nowip}
#开始测试当前ip
ping -c 3 ${nowip} > /dev/null
#当访问不可达时,开始更换ip
if [ $? == 1 ]
then
	#获取dns解析的ip总数
	api_ip_count=$(nslookup api.douban.com 8.8.8.8 |grep -v 8.8.8.8 |grep Address | awk -F ' ' '{print $2}' | wc -l)
	#将所有ip存入变量
	api_list=$(nslookup api.douban.com 8.8.8.8 |grep -v 8.8.8.8 |grep Address | awk -F ' ' '{print $2}')
	#设置检测ip失败计数
	failed_count=0
	#循环从解析的ip列表中读取ip
	for val in $(echo ${api_list})
	do
		#检测列表中的ip是否可达
		ping -c 3 ${val} > /dev/null
		#当可达时
		if [ $? == 0 ]
		then 
			#将ip存入变量
			setip=$val
			#echo ${setip}
			#更新host中的ip解析
			sed -i "s/${nowip} api.douban.com/${setip} api.douban.com/g" /etc/hosts
			#发送邮件通知ip更新成功
			echo "原解析的ip:${nowip}<br>现解析的ip:${setip}<br>$(date '+%Y-%m-%d %H:%M')" | mutt -s "访问豆瓣api地址更换" -e 'set content_type="text/html"' [email protected]
			#跳出循环
			break
		else
			#当ip检测不可达时,检测失败计数+1
			let failed_count+=1
			#echo $failed_count
			#当计数器大于等于解析获取的ip总数时
			if [ $failed_count >= $api_ip_count ]
			then
				#发送邮件告警所有ip均不可用
				echo "所有能解析的ip均无法访问!<br>已解析的ip列表:${api_list}<br>当前主机:${local_ip}<br>$(date '+%Y-%m-%d %H:%M')" | mutt -s "访问豆瓣api故障"  -e 'set content_type="text/html"' [email protected]
			fi
		fi
	done
fi

Sevenfal

这个人太懒什么东西都没留下

文章评论(0)