IP地址解析DNS方案
背景
指定IP解析域名,查看解析的域名,常用作CDN地址解析查询是否生效。本文章给出几个解决方案的shell脚本
#!/bin/bash
#
#****************************************************************************************
#Author: wei
#***************************************************************************************
circulate_check () {
RED=`echo -e '\e[1;31m'`
GGREEN=`echo -e '\e[1;32m'`
BLUE=`echo -e '\e[1;36m'`
END=`echo -e '\e[0m'`
while true ;do
read -p "${BLUE}请输入ip地址:${END}" IP_LIST
if [[ "${IP_LIST}" =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]];then
echo "${GGREEN}输入的IP为IPV4${END}"
RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:${IP_LIST} 'https://www.baidu.com/' -o /dev/null -vk 2>&1| egrep 'common name' |awk '{print $NF}')
if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
echo "${GGREEN}IP为杭${END}"
elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
echo "${GGREEN}IP为自${END}"
fi
elif [[ "${IP_LIST}" =~ ([0-9a-Z]{0,4}:){5}[0-9a-Z]{0,4}$ ]];then
echo '输入的IP为IPV6'
# RESOLVE_RESULT=$(curl --resolve www.baidu.com:443 "https://[${IP_LIST}]" -vv -o /dev/null -k -g 2>&1 | egrep 'common name' |awk '{print $NF}')
RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:[${IP_LIST}] "https://www.baidu.com" -vv -o /dev/null -k -g 2>&1 | egrep 'common name' | awk '{print $NF}')
if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
echo "${GGREEN}IP为杭${END}"
elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
echo "${GGREEN}IP为自${END}"
fi
elif [[ "${IP_LIST}" == exit ]];then
echo "${GGREEN}exit...${END}" && exit
else
echo "${RED}输入的IP错误,请重新输入!${END}"
fi
done
}
ip_check () {
#传入IP地址的变量和值
read -p "请输入ip地址:" IP_LIST
#判断变量是否为IPV4
if [[ "${IP_LIST}" =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]];then
echo '输入的IP为IPV4'
#获取IPv4地址解析的结果,并自定义变量
RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:${IP_LIST} 'https://www.baidu.com/' -o /dev/null -vk 2>&1| egrep 'common name' |awk '{print $NF}')
#判断变量是哪家的
if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
echo 'IPV4为杭'
elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
echo 'IPV4为自'
#都不满足条件则打印错误结果和IP,方便排查问题
else
echo "IPV4解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${IP_LIST}"
fi
#如果上面匹配失败,接下来判断变量是否为IPV6
elif [[ "${IP_LIST}" =~ ([0-9a-Z]{0,4}:){5}[0-9a-Z]{0,4}$ ]];then
echo '输入的IP为IPV6'
RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:[${IP_LIST}] "https://www.baidu.com" -vv -o /dev/null -k -g 2>&1 | egrep 'commonname' | awk '{print $NF}')
# RESOLVE_RESULT=$(curl --resolve www.baidu.com:443 "https://[${IP_LIST}]" -vv -o /dev/null -k -g 2>&1 | egrep 'common name' | awk'{print $NF}')
if [[ "$RESOLVE_RESULT}" == *.weirui.cn ]];then
echo 'IPV6为杭'
elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
echo 'IPV6为自'
else
echo "IPV6解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${IP_LIST}"
fi
#如果上面条件匹配都不满足,则打印信息退出
else
echo '输入的IP错误,请重新输入!'
fi
}
ip_auto_check () {
if [[ $1 =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]];then
echo '输入的IP为IPV4'
RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:$1 'https://www.baidu.com/' -o /dev/null -vk 2>&1| egrep 'common name' |awk '{print $NF}')
if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
echo 'IPV4为杭'
elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
echo 'IPV4为自'
else
echo "IPV4解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${IP_LIST}"
fi
elif [[ $1 =~ ([0-9a-Z]{0,4}:){5}[0-9a-Z]{0,4}$ ]];then
echo '输入的IP为IPV6'
RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:[$1] "https://www.baidu.com" -vv -o /dev/null -k -g 2>&1 | egrep 'common name' |awk '{print $NF}')
# RESOLVE_RESULT=$(curl --resolve www.baidu.com:443 "https://[$1]" -vv -o /dev/null -k -g 2>&1 | egrep 'common name' | awk '{print$NF}')
if [[ "$RESOLVE_RESULT}" == *.weirui.cn ]];then
echo 'IPV6为杭'
elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
echo 'IPV6为自'
else
echo "IPV6解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:$1"
fi
else
echo '输入的IP错误,请重新输入!'
fi
}
ip_more_check () {
echo '请将IP写入ip-list.txt文件'
NUM=$(wc -l ip-list.txt |awk '{print $1}')
[[ "${NUM}" == 0 ]] && echo 'ip-list.txt内容为空' || echo 'ip-list.txt内容不空'
IP_LIST=$(cat ip-list.txt)
for i in ${IP_LIST};do
if [[ "${i}" =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]];then
echo '输入的IP为IPV4'
RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:${i} 'https://www.baidu.com/' -o /dev/null -vk 2>&1| egrep 'common name' |awk '{print $NF}')
if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
echo 'IPV4为杭'
elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
echo 'IPV4为自'
else
echo "IPV4解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${i}"
fi
elif [[ "${i}" =~ ([0-9a-Z]{0,4}:){5}[0-9a-Z]{0,4}$ ]];then
echo '输入的IP为IPV6'
RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:[${i}] "https://www.baidu.com" -vv -o /dev/null -k -g 2>&1 | egrep 'common name' | awk '{print $NF}')
# RESOLVE_RESULT=$(curl --resolve www.baidu.com:443 "https://[$i]" -vv -o /dev/null -k -g 2>&1 | egrep 'common name' | awk '{print $NF}')
if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
echo 'IPV6为杭'
elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
echo 'IPV6为自'
else
echo "IPV6解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${i}"
fi
else
echo '输入的IP错误,请重新输入!'
fi
done
}
#方法一: 交互式循环查询操作,exit退出操作,如:./check-ip.sh
#circulate_check
#方法二: 单次查询IP操作,交互式,如:./check-ip.sh
#ip_check
# 方法三: 单次指定IP查询,非交互式,如:./check-ip.sh 120.24.61.213
#ip_auto_check $1
#方法四: 批量处理IP的解析
ip_more_check
#方法五: 菜单式查询,交互式,case语句
#方法六:循环菜单式查询,交互式,while + case语句
操作演示
方法一
方法二
方法三
方法四
剩下两种场景可自行研究编写,有需要提供思路可联系指导