Shell脚本实现多选DNS同时批量解析域名IP地址(新更新)

14 篇文章 0 订阅

背景前文

该脚本是在原先《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文件
image.png

DNS_File文件内容格式

image.png

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

结果示例

image.png


欢迎转载,转载请注明出处,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值