以下のリンクで書いていた問題点を解消するスクリプトを書いてみた。
複数のdnsサーバーに一度に問い合わせるスクリプトを改良した
以下のエントリーの積み残しである引数を付与して1行で完結するコマンドを作成してみた。hostコマンドのオプションの場合だけ対応するという省機能のスクリプトだけどないよりはよいでしょう。 ./name_resovl.sh #!/bin/bas...
修正箇所
冗長な処理はすべて関数にしたのでアルゴリズムのところはすっきりしたはず。
以下関数の解説
lg_exst_chck
同名のログが存在する場合は、カウントアップして新たなログを作成。
1ドメインあたり、1日最大まで999個作成可能だが、1000個目以降はナンバリングされずすべて上書。
cmd_hlp
helpを呼び出す。
function intrctv_md
対話モードで実行
function cmd_md
hostコマンド実行 事前に$cmdにオプションも含めたコマンドを格納する必要あり
name_resovl_cnt.sh
#!/bin/bash
cmd=""
dlist="8.8.8.8 9.9.9.9 9.9.9.10 1.1.1.1"
date=`date +%Y%m%d`
cnt="01"
fqdn="google.com"
opt=""
logs="./logs"
i="array"
#logファイルが1個以上存在する場合、末尾の一番大きい番号をカウントアップして新規作成
#最大999個作成可能
function lg_exst_chck () {
for cnt in `seq -f %03g 1 999`
do
if
[ ! -f $logs${cnt}.log ];then
logs=$logs${cnt}.log
break
fi
done
}
#helpを呼び出す
function cmd_hlp () {
echo "This script use
host command - DNS lookup utility"
echo "OPTIONS"
echo "-t a FQDN answer A Record."
echo "-t aaaa FQDN answer AAAA Record."
echo "-t ptr FQDN answer MX Record."
echo "-t mx FQDN answer MX Record."
echo "-t cname FQDN answer CNAME Record."
echo "-t txt FQDN answer TXT Record."
echo "Example: $0 -t a google.com"
}
#対話モード
function intrctv_md () {
read -t 120 -p "Input FQDN
resolution host(default:$fqdn): " fqdn
case "$fqdn" in
"") fqdn=google.com
;;
*)
;;
esac
read -t 120 -p "Input RRset
resolution zone <<A,AAAA,PTR,MX,TXT,ALL>>(default:None):" opt
case "$opt" in
A ) opt="-t a"
;;
AAAA ) opt="-t aaaa"
;;
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
}
#hostコマンド実行 事前に$cmdにコマンドを格納する必要あり
function cmd_md () {
for i in $dlist
do
echo "##### name server$i "
echo "##### $cmd $i"
$cmd $i
done > $logs
echo -e "\ncreate name resoluton result.\nlooking for current directory.\nfile: $logs"
}
#以下実行処理
#logsディレクトリがない場合作成
[ ! -e $logs ] && mkdir -p $logs
if [ "$1" = "-h" ] || [ "$1" = "--help" ]
then
cmd_hlp
elif
[ $# = 0 ]
then
intrctv_md
logs="./logs/resolv_"$date"_"$fqdn"_"
lg_exst_chck
opt="$opt $fqdn"
cmd="host $opt"
cmd_md
elif
[ "$1" != "-t" ]
then
echo -e "Error! Invalidarguments!\nRun "$0 -h" and try again!"
else
logs="./logs/resolv_"$date"_"$3"_"
lg_exst_chck
cmd="host $@"
cmd_md
fi
実行結果
スクリプト実行後、./logs/resolv_YYYYMMDD_{FQDN}_{NNN}.logというファイルを出力する。
何も指定しない場合、google.comを問い合わせてくる。
./name_resolv_cnt.sh
Input FQDN
resolution host(default:google.com):
Input RRset
resolution zone <<A,AAAA,PTR,MX,TXT,ALL>>(default:None):
create name resoluton result.
looking for current directory.
file: ./logs/resolv_20211128_google.com_003.log
ログファイルの中身は以下の通り。
ネームサーバー毎に改行した方が見やすいかも。
##### name server8.8.8.8
##### host google.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
google.com has address 172.217.175.238
google.com has IPv6 address 2404:6800:4004:811::200e
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
##### name server9.9.9.9
##### host google.com 9.9.9.9
Using domain server:
Name: 9.9.9.9
Address: 9.9.9.9#53
Aliases:
google.com has address 172.217.25.110
google.com has IPv6 address 2404:6800:4004:826::200e
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
##### name server9.9.9.10
##### host google.com 9.9.9.10
Using domain server:
Name: 9.9.9.10
Address: 9.9.9.10#53
Aliases:
google.com has address 142.251.42.174
google.com has IPv6 address 2404:6800:4004:821::200e
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
##### name server1.1.1.1
##### host google.com 1.1.1.1
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases:
google.com has address 172.217.31.174
google.com has IPv6 address 2404:6800:4004:821::200e
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
応用
for文を利用することで、複数のFQDNを一度に参照可能。
以下のファイルを作成。
cat fqdn
google.com
yahoo.co.jp
ファイル:fqdnをforで回す。
すると参照ログを一度に複数出力できるので、DNSで作業した後の一覧確認が楽になるかも。
for i in `cat fqdn` ; do ./name_resolv_cnt.sh -t a $i ; done
create name resoluton result.
looking for current directory.
file: ./logs/resolv_20211128_google.com_001.log
create name resoluton result.
looking for current directory.
file: ./logs/resolv_20211128_yahoo.co.jp_001.log
積み残し
以下の内容はいずれ解消したい。できない場合はやらないよう決めてしまいたい。
- ゾーン指定時のオプションで小文字が使えない(正規表現使おうとして失敗した)
- 名前解決するホストを一度に複数登録できるような機能を追加する
- 対話形式、ワンライナーどちらもすべて同じ変数を利用するようにしたい
コメント