当前位置:网站首页>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
结果示例

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

曲折的tensorflow安装过程(Tensorflow 安装问题的解决)

谈谈对Volatile的理解

图形化矩阵,矩阵到底长什么样?

AutoJs学习-密码生成器

Implementation of mysql connection pool

你认同这个观点吗?大多数企业的数字化都只是为了缓解焦虑

Facebook's automated data analysis solution saves worry and effort in advertising

享年94岁,图灵奖得主、计算复杂性理论先驱Juris Hartmanis逝世

HikariCP database connection pool, too fast!

Re22:读论文 HetSANN An Attention-based Graph Neural Network for Heterogeneous Structural Learning
随机推荐
动态规划每日一练(3)
Spend 2 hours a day to make up for Tencent T8, play 688 pages of SSM framework and Redis, and successfully land on Meituan
RPA助你玩转抖音,开启电商运营新引擎
基于列表的排队与叫号系统
使用scrapy 把爬到的数据保存到mysql 防止重复
system_error错误处理库学习
typeinfo类型支持库学习
软件测试与质量 之白盒测试
STL中list实现
Overview of Edge Computing Open Source Projects
HCIA动态主机配置协议实验(dhcp)
日元疲软令游戏机在日本变身“理财产品”:黄牛大赚
Re23:读论文 How Does NLP Benefit Legal System: A Summary of Legal Artificial Intelligence
理解JS的三座大山
Have you ever learned about these architecture designs and architecture knowledge systems?(Architecture book recommendation)
1对1视频源码——快速实现短视频功能提升竞争力
Facebook's automated data analysis solution saves worry and effort in advertising
QT专题:事件机制event基础篇
Jetpack Compose 中的状态管理
R语言ggplot2可视化:使用ggpubr包的ggbarplot函数可视化水平柱状图(条形图)、使用orientation参数设置柱状图转置为条形图