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

欢迎转载,转载请注明出处,谢谢~
边栏推荐
- R语言时间序列数据的平滑:使用KernSmooth包的dpill函数和locpoly函数对时间序列数据进行平滑以消除噪声
- Rust from entry to master 03-helloworld
- 【技术分享】OSPFv3基本原理
- The god-level Alibaba "high concurrency" tutorial "basic + actual combat + source code + interview + architecture"
- HCIA静态路由综合练习
- In the whole development of chi V853 board tried to compile QT test
- matlab-day02
- 2022牛客暑期多校训练营4(ADHKLMN)
- 转转反爬攻防战
- 【Redis】通用命令
猜你喜欢

李航《统计学习方法》笔记之感知机perceptron

【新版干货书】深度伪造 (DeepFakes):创造,检测和影响

AutoJs学习-实现科赫雪花

李航《统计学习方法》笔记之k近邻法

Have you ever learned about these architecture designs and architecture knowledge systems?(Architecture book recommendation)

李航《统计学习方法》笔记之朴素贝叶斯法

【云原生】快出数量级的性能是怎样炼成的?就提升了亿点点

适配器模式适配出栈和队列及优先级队列

基于列表的排队与叫号系统

Using the TCP protocol, will there be no packet loss?
随机推荐
动态规划每日一练(3)
AutoJs学习-存款计算器
边缘计算开源项目概述
mysql进阶(二十一)删除表数据与数据库四大特性
腾讯T8架构师,教你学中小研发团队架构实践PDF,高级架构师捷径
十、 网络管理
QT专题:组合会话框和文本编辑器
C语言volatile关键字、内嵌汇编volatile与编译器的爱恨情仇
DVWA 通关记录 2 - 命令注入 Command Injection
Rust from entry to master 03-helloworld
单机部署flink,创建oracle19c rac的连接表时报错 ORA-12505 ,怎么回事?
EdrawMax Crack,多合一的图表应用程序
理解JS的三座大山
CFdiv2-The Number of Imposters-(两种点集图上染色问题总结)
【New Edition】DeepFakes: Creation, Detection and Influence
重磅大咖来袭!阿里云生命科学与智能计算峰会精彩内容剧透
在全志V853开发板试编译QT测试
线程池的使用及ThreadPoolExecutor源码分析
练习16-两道模拟题
读博一年后对机器学习工程的思考