当前位置:网站首页>Shell脚本实现多选DNS同时批量解析域名IP地址(新更新)
Shell脚本实现多选DNS同时批量解析域名IP地址(新更新)
2022-08-02 09:41:00 【isk--cosann】
背景前文
该脚本是在原先《shell脚本实现批量解析域名IP地址(支持多DNS)》的基础上再进行了代码逻辑优化和小细节代码更新,重要变动部分如下:
增加任意多选DNS逻辑,即执行时可不选定目标DNS,只需指定DNS_File文件(默认DNS为114.114.114.114,有定制需求可自行修改)
实现代码
#!/bin/bash
#Author:cosann
#Function:批量解析域名A记录和CNAME记录脚本
#version:2.0
#Create Time:20220714
#Update Time: 20220801
#Description:
#1.支持DNSIP传参判定
#2.支持DNS解析域名文件判定
#3.自定义多选DNS(默认DNS:114.114.114.114,最多支持三个DNS解析)
clear #脚本运行时清屏
#提示脚本信息
cat <<EOF ============================================= == Welcome to the DNS resolution script ===== --------------------------------------------- #1.Author:Cosann #2.Function:批量解析域名A记录和CNAME记录脚本 #3.version:2.0 #4.Description: - 支持DNSIP传参判定 - 支持DNS解析域名文件判定 - 自定义多选DNS(默认DNS:114.114.114.114 最多支持三个DNS解析) ============================================= EOF
echo #换行
#初始化默认DNS服务器
dns=114.114.114.114
#定义DNS文本检测函数
function dns_file_cleck () {
if ! [ -f "$dns_file" ]
then
echo "$4文件错误,请检查文本文件"
exit
fi
}
#定义DNS网络检测函数
function Ping_Stat_1 (){
ping -w 1 $dns1 &> /dev/null #ping测试
if [ "`echo $?`" == 0 ]
then
return 100 #返回DNS目标网络可达数值
else
return 200 #返回DNS目标网络不可达数值
fi
}
function Ping_Stat_2 (){
ping -w 1 $dns2 &> /dev/null
if [ "`echo $?`" == 0 ]
then
return 100
else
return 200
fi
}
function Ping_Stat_3 (){
ping -w 1 $dns3 &> /dev/null
if [ "`echo $?`" == 0 ]
then
return 100
else
return 200
fi
}
#传参检测及执行控制
if [ $# -eq "1" ]
then
dns1=$dns;dns_file=$1;
echo -e "DNS:$dns1\tDNS_File:$PWD/$dns_file\n"
dns_file_cleck #调用DNS文本检测函数
Ping_Stat_1 #DNS检测函数调用
code1=`echo $?`
elif [ $# -eq "2" ]
then
dns1=$1;dns_file=$2
echo -e "DNS:$dns1\tDNS_File:$PWD/$dns_file\n"
dns_file_cleck
Ping_Stat_1
code1=`echo $?`
echo $code1
elif [ $# -eq "3" ]
then
dns1=$1;dns2=$2;dns_file=$3
echo -e "DNS:$dns1 $dns2\tDNS_File:$PWD/$dns_file\n"
dns_file_cleck
Ping_Stat_1
code1=`echo $?`
Ping_Stat_2
code2=`echo $?`
elif [ $# -eq "4" ]
then
dns1=$1;dns2=$2;dns3=$3;dns_file=$4
echo -e "DNS:$dns1 $dns2 $dns3\tDNS_File:$PWD/$dns_file\n"
dns_file_cleck
Ping_Stat_1
code1=`echo $?`
Ping_Stat_2
code2=`echo $?`
Ping_Stat_3
code3=`echo $?`
else
echo -e "Usage: $0 dns1 dns2 dns3 dns_file"
exit
fi
echo -e "》》》DNS连通性检测中,请稍等》》》"
#DNS解析控制及解析功能实现
if [ "$code1" == 100 ];then
echo -e "-------------------------------------------\n"
echo -e "DNS:$dns1 OK\n"
echo -e "DNS1(IP:$dns1)"
echo -e "域名\t\t\tA记录/CNAME 记录"
cat $dns_file | while read line
do
dig @$dns1 $line A +short | sed "s/^/$line\t\t/g"
done
echo -e "\n"
elif [ "$code1" == 200 ];then
echo -e "DNS:$dns1 NG" && echo -e "目标DNS网络不可达!\n"
fi
if [ "$code2" == 100 ];then
echo -e "-------------------------------------------\n"
echo -e "DNS:$dns2 OK\n"
echo -e "DNS2(IP:$dns2)"
echo -e "域名\t\t\tA记录/CNAME记录"
cat $dns_file | while read line
do
dig @$dns2 $line A +short | sed "s/^/$line\t\t/g"
done
echo -e "\n"
elif [ "$code2" == 200 ];then
echo -e "DNS:$dns2 NG" && echo -e "目标DNS网络不可达!\n"
fi
if [ "$code3" == 100 ];then
echo -e "-------------------------------------------\n"
echo -e "DNS:$dns3 OK\n"
echo -e "DNS3(IP:$dns3)"
echo -e "域名\t\t\tA记录/CNAME记录"
cat $dns_file | while read line
do
dig @$dns3 $line A +short | sed "s/^/$line\t\t/g"
done
elif [ "$code3" == 200 ];then
echo -e "DNS:$dns3 NG" && echo -e "目标DNS网络不可达!\n"
fi
exit 0
使用方法
准备脚本文件和DNS_File文件
DNS_File文件内容格式

1. 只指定DNS_File文件运行脚本(使用脚本默认设定的114.114.114.114进行解析)
./dns.sh host
2. 指定一个DNS服务器运行脚本
./dns.sh 8.8.8.8 host
3. 指定两个DNS服务器运行脚本
./dns.sh 8.8.8.8 114.114.114.114 host
4. 指定三个DNS服务器运行脚本
./dns.sh 8.8.8.8 114.114.114.114 192.168.222.1 host
结果示例

欢迎转载,转载请注明出处,谢谢~
边栏推荐
猜你喜欢

HCIA动态主机配置协议实验(dhcp)

牛客网项目17节生成验证码 刷新验证码一直没反应

转转反爬攻防战

动态规划每日一练(3)

Naive Bayesian Method of Li Hang's "Statistical Learning Methods" Notes

带你认识40G单纤双向光模块-QSFP+ BiDi光模块

Navicat连接MySQL时弹出:1045:Access denied for user ‘root’@’localhost’

AutoJs学习-存款计算器

HikariCP database connection pool, too fast!

百战RHCE(第四十六战:运维工程师必会技-Ansible学习1-基础知识讲解)
随机推荐
智能网络安全网卡|这是不是你要的安全感
1对1视频源码——快速实现短视频功能提升竞争力
腾讯T8架构师,教你学中小研发团队架构实践PDF,高级架构师捷径
HikariCP数据库连接池,太快了!
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一:解题思路
ABAP 和json转换的方法
打印lua内部结构的函数调用
小程序云开发(十):渐变与动画
Pytorch's LSTM parameters explained
被报表需求逼疯的银行数据人,是时候放弃用Excel做报表了
食品安全 | 鱼肝油不是鱼油,家有宝宝的注意了
迭代器失效问题
练习-17
单机部署flink,创建oracle19c rac的连接表时报错 ORA-12505 ,怎么回事?
日元疲软令游戏机在日本变身“理财产品”:黄牛大赚
【云原生】快出数量级的性能是怎样炼成的?就提升了亿点点
关于缓存数据的探讨
cococreator dynamically set sprite
system_error错误处理库学习
向量点积(Dot Product),向量叉积(Cross Product)