0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

今すぐ使える!DNSの伝播時間の測定について

Last updated at Posted at 2024-02-04

概要

代表的な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伝播を正確に測定するには、異なる地域やネットワークからのクエリを発行するなどの追加の工夫が必要。あくまで参考ツールとしてご参照いただきたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?