概要
代表的なDNSサーバに向けて定期的に問い合わせを実施し、どのタイミングで名前解決の結果が切り替わるか確認するためのシェルをchatGPTで作成する。
1.前提
今回はPowershellで実行。
Powershellでスクリプト実行できるように以下コマンドを管理者権限で実行しておく。
Set-ExecutionPolicy RemoteSigned
2.スクリプト作成
cursorのGPT機能でコードを作成。
質問:nslookupを定期的に代表的なDNSを指定して打ち、伝播時間を測定するスクリプトを書いてほしいといった趣旨でお願してみた結果が以下。(これでスクリプトが書けてしまうとは・・!
※cursorのインストール方法は別途記事作成予定。
シェル例
nslookupを指定した回数だけ繰り返し、結果をログに記録する。
$dns_serverには実際のDNSサーバのIPアドレスを設定し、$target_domainには対象のドメインを指定する。
$intervalは実行間隔(秒)で、必要に応じて調整。ログはdns_propagation.logに保存される。
# 定期的に実行する回数
$iterations = 10
# DNSサーバのIPアドレス
$dns_server = "x.x.x.x" # 例: Public DNS
# 対象のドメイン
$target_domain = "example.com"
# 実行間隔(秒)
$interval = 60 # 60秒ごとに実行
# ログファイル
$log_file = "dns_propagation.log"
# スクリプト開始時のメッセージ
Write-Host "Start DNS test"
# 定期的にnslookupを実行
for ($i = 1; $i -le $iterations; $i++) {
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# nslookupの実行
$result = nslookup $target_domain $dns_server
# 結果をログに追加
Add-Content -Path $log_file -Value ("[${timestamp}] Iteration $i " + $result)
# インターバルを待つ
Start-Sleep -Seconds $interval
}
# スクリプト終了時のメッセージ
Write-Host "DNS test finished"
ご参考
以下はシェルのスクリプト。
このスクリプトでは、指定されたドメインとDNSサーバーに対してnslookupコマンドを発行し、応答時間を測定する。結果はログにも保管される。sleep $interval_secondsにより、指定した秒数だけ待機してから次のループを実行するため、パラメータは必要に応じて修正が必要。
#!/bin/bash
domain="example.com"
dns_server="x.x.x.x" # 対象のDNSサーバーを指定
interval_seconds=60 # 定期的な実行間隔(秒)
log_file="dns_propagation_log.txt" # ログファイルの指定
echo "DNS Propagation Measurement for $domain"
while true; do
start_time=$(date +%s.%N)
response=$(nslookup $domain $dns_server)
end_time=$(date +%s.%N)
duration=$(echo "$end_time - $start_time" | bc)
if [ $? -eq 0 ]; then
echo "$(date): Response received in ${duration} seconds" >> $log_file
echo "$response" >> $log_file
else
echo "$(date): No response received." >> $log_file
fi
sleep $interval_seconds
done
注意点
このスクリプトは単純な周期的な実行を行うが、実際のDNS伝播を正確に測定するには、異なる地域やネットワークからのクエリを発行するなどの追加の工夫が必要。あくまで参考ツールとしてご参照いただきたい。