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

欢迎转载,转载请注明出处,谢谢~
边栏推荐
- 剑指offer专项突击版第17天
- Implementation of mysql connection pool
- 智能网络安全网卡|这是不是你要的安全感
- 百战RHCE(第四十七战:运维工程师必会技-Ansible学习2-Ansible安装配置练习环境)
- Facebook自动化数据分析方案,广告投放省心省力
- 每日一题练习1-15
- 转转反爬攻防战
- Supervised learning of Li Hang's "Statistical Learning Methods" Notes
- Use compilation to realize special effects of love
- It's time for bank data people who are driven crazy by reporting requirements to give up using Excel for reporting
猜你喜欢

Two-dimensional array piecemeal knowledge sorting

百战RHCE(第四十七战:运维工程师必会技-Ansible学习2-Ansible安装配置练习环境)

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

迭代器失效问题

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

ConvNeXt论文及实现

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

It's time for bank data people who are driven crazy by reporting requirements to give up using Excel for reporting

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

State Management in Jetpack Compose
随机推荐
Naive Bayesian Method of Li Hang's "Statistical Learning Methods" Notes
一文带你了解推荐系统常用模型及框架
mysql进阶(二十一)删除表数据与数据库四大特性
百战RHCE(第四十七战:运维工程师必会技-Ansible学习2-Ansible安装配置练习环境)
剑指offer专项突击版第17天
阿里巴巴 CTO 程立:开源是基础软件的源头!
node封装一个图片拼接插件
让电商运营10倍提效的自动化工具,你get了吗?
QT专题:组合会话框和文本编辑器
nacos项目搭建
堪称神级的阿里巴巴“高并发”教程《基础+实战+源码+面试+架构》
Tencent T8 architect, teach you to learn small and medium R&D team architecture practice PDF, senior architect shortcut
刷题错题录1-隐式转换与精度丢失
在全志V853开发板试编译QT测试
sql concat(),如何才能拼接表的名字
【Redis】Jedis
第15章 泛型
迭代器失效问题
R语言使用ggpubr包的ggtexttable函数可视化表格数据(直接绘制表格图或者在图像中添加表格数据)、设置theme主题参数自定义表格中表头内容的填充色(使用colnames.style参数)
STL中list实现