複数のdnsサーバーに一度に問い合わせるスクリプト

以下のワンライナーをちょこっと改善してスクリプトにしてみた。
デバッグコードと汚いコメントアウトがあることはご愛敬。

実行すると対話形式でFQDNと解決したいゾーン名(A,PTR,MX,TXT,NS)を指定できる。

Input name resolution host(default:google.com):
Input name resolution zone <<A,PTR,MX,TXT,NS>>(default:A):

スクリプト名:name_resolve.sh
コード:

#!/bin/bash
 
 

dlist=`cat dns`
fqdn="google.com"
date=`date +%Y%m%d%H%M%S`
logs="./logs"
 

#sleep 2
 

#logsディレクトリがない場合作成
[ ! -e $logs ] && mkdir -p $logs
 

read -t 120 -p "Input name resolution host(default:$fqdn): " fqdn
 

        case "$fqdn" in
        #       "") fqdn=$fqdn
                "") fqdn=google.com
                        ;;
                *)
                        ;;
        esac
        #echo $fqdn && sleep 1
        #debug end
 

read -t 120 -p "Input name resolution zone <<A,PTR,MX,TXT,ALL>>(default:None):" opt
 

        case "$opt" in
             A ) opt="-t a"
                        ;;
           PTR ) opt="-t ptr"
                        ;;
            MX ) opt="-t mx"
                        ;;
           TXT ) opt="-t txt"
                        ;;
           ALL ) opt="-a"
                        ;;
            "" ) opt=""
                        ;;
              *) echo -e "Cannot understand your answer.\nRetype name resolution zone \n"
                        exit 0
                        ;;
        esac
 

cmd="host $opt"
logs="./logs/resolv_"$date"_"$fqdn".log"
 

        #debug code
        #echo $opt && sleep 1
        #echo $cmd && sleep 1
        #debug end
 

        for i in $dlist
        do
                echo "##### name server $i "
                echo "##### $cmd $fqdn $i "
                $cmd $fqdn $i
        done > $logs
 

        echo -e "\ncreate name resoluton result.\nlooking for current directory.\nfile:$logs"

 

積み残し:
〇120秒以内に入力できなかった場合のエラー処理が記載されていない
冒頭で宣言できていない変数「cmd」がある

先頭で宣言すべき<fqdn=google.com>を処理中にベタ書きしている
先頭で宣言すべき<cmd=”host $opt”>が中断に宣言されており見通しが悪い
〇SOAレコードとか他のレコード参照用のcase文追加してもいいかも
〇ゾーン指定時に小文字が使えない(正規表現使おうとして失敗した)
〇名前解決するホストを一度に複数登録できるような機能を追加する
スクリプトの後ろに引数を指定することで、対話形式ではなく処理させたい
例:name_resolv.sh g.cn mx

コメント

タイトルとURLをコピーしました