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.

リストにドメイン名を書いて、nslookupを自動実行

Last updated at Posted at 2023-02-17

DNSの切替などで、大量のドメイン名に対してnslookupでDNSレコードを確認することがあった。
手作業でコマンドを実行するにはあまりに大変で、ミスも増える。おまけに記録にも残らないので、Powershellでスクリプトにした。

大量のドメインをリストとしてCSVに記載し、そのCSVをシェルに読み込ませて繰り返しnslookupをさせる。ドメイン名はざっくり2種類に分類した。1つはhttpプロトコルで参照する用のドメイン(ブラウザのURLに書いてあるドメイン名)として、AレコードとCNAMEレコードを確認したいもの。もう1つはメールなどのドメイン(アットマーク以降に記載のもの)で、MXとTXTレコードを確認したいもの。これらのドメインが大量にある場合、スクリプトを使って自動で実行する。

動作環境

・Windows 10 Pro Ver 22H2 OSビルド19045.2604
WindowsServerで実行したら動かなかったりするので、Powershellの動作確認って本当に難しい。Linuxのbashと勝手が違う。

ソースコード

まずはそのソースコードから。

nslookup-list.ps1(文字コードUTF-8 with BOM/改行コードCRLFで保存)
#$Arg1は文字列型,リストを指定
Param([String]$Arg1)

#リストの存在確認
$csvfile = $Arg1
if (-not (Test-Path $csvfile)){
    Write-Output "リストがないため、スクリプト終了"
    exit 11
}

#リストを配列に格納
$array01 = Import-Csv $csvfile -Header type, FQDN
#DNSキャッシュを削除
ipconfig /flushdns
#forによる配列読み込み
foreach ($i in $array01) {
    #時刻取得
    Get-Date -Format F
    #Aレコード、CNAMEレコードの条件分岐
    If($i.type -eq "web"){      
        Write-Output ("nslookup -type=cname "+$i.FQDN)
        nslookup -type=cname $i.FQDN
        Write-Output ("nslookup -type=a "+$i.FQDN)
        nslookup -type=a $i.FQDN
    #MXレコード、TXTレコードの条件分岐
    }elseif($i.type -eq "mail"){
        Write-Output ("nslookup -type=mx "+$i.FQDN)
        nslookup -type=mx $i.FQDN
        Write-Output ("nslookup -type=txt "+$i.FQDN)
        nslookup -type=txt $i.FQDN
    # 例外処理
    }else{
        Write-Output "リスト1列目の指定エラー(web/mail以外)のためスクリプト終了"
        exit 12
    }
}

リストCSVの存在確認を行い、存在しなければ11をエラーコードとして返す。
リストCSVを読み込んで、1列目にwebまたはmailの指定がなければ、エラーコード12を返す。
色んなエラーハンドリングを書いてたけど(引数チェックとか、リスト2列目が空の場合とか)、別に無償奉仕だったしそこまでやらんでええわ、と思ったのであきらめた。リファクタリングは適宜実施。

リスト

スクリプトに読み込ませるリストをCSV形式で作成する。

list.csv(文字コードUTF-8 with BOM/改行コードCRLFで保存)
mail,yahoo.co.jp
mail,gmail.com
mail,outlook.com
web,www.yahoo.co.jp
web,www.google.com

mailと書いている行はメールのドメイン名。MXとTXT(SPF)レコードを返す。
webはwebサイトのドメイン名。AとCNAMEレコードを返す。

実行

Powershellを開いてコマンドをたたく。
実行結果のログを残して保存しておきたいので、そういう形で実行する。
ここではC:\Users\localというフォルダにスクリプトとリストを保存している。

空ログファイル作成

Powershellプロンプト
PS C:\Users\local> $USERDESKTOP=[System.Environment]::GetFolderPath("Desktop")
PS C:\Users\local> $LOGDATE=(Get-Date).ToString("yyyyMMdd-HHmmss")
PS C:\Users\local> New-Item -type file $USERDESKTOP\nslookup-list_$LOGDATE.log
# ↑デスクトップにログファイル(空)を生成している。

空のログファイル(nslookup-list_yyyyMMdd-HHmmss.log)をデスクトップ作成した。作成したファイルはスクリプト実行が終わるまで開かないこと。

nslookupスクリプト実行

この記録する器ができたらスクリプトを実行。

Powershellプロンプト
PS C:\Users\local> .\nslookup-list.ps1 .\list.csv > $USERDESKTOP\nslookup-list_$LOGDATE.log

デスクトップの空ログファイル(nslookup-list_yyyyMMdd-HHmmss.log)に実行結果が保存される。ログの中身を確認

ログ確認

Powershellプロンプト
PS C:\Users\local> cat $USERDESKTOP\nslookup-list_$LOGDATE.log

Windows IP 構成

DNS リゾルバー キャッシュは正常にフラッシュされました。
2023217 13:54:31
nslookup -type=mx yahoo.co.jp
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

yahoo.co.jp     MX preference = 10, mail exchanger = mx5.mail.yahoo.co.jp
yahoo.co.jp     MX preference = 10, mail exchanger = mx3.mail.yahoo.co.jp
yahoo.co.jp     MX preference = 10, mail exchanger = mx2.mail.yahoo.co.jp
yahoo.co.jp     MX preference = 10, mail exchanger = mx1.mail.yahoo.co.jp
nslookup -type=txt yahoo.co.jp
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

yahoo.co.jp     text =

        "google-site-verification=GvbYgNin-mY73VbS4IJK2D8nI3tHEf2NpRdy76VYqBU"
yahoo.co.jp     text =

        "v=spf1 include:spf.yahoo.co.jp ~all"
2023217 13:54:31
nslookup -type=mx gmail.com
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

gmail.com       MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com       MX preference = 30, mail exchanger = alt3.gmail-smtp-in.l.google.com
gmail.com       MX preference = 20, mail exchanger = alt2.gmail-smtp-in.l.google.com
gmail.com       MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google.com
gmail.com       MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google.com

gmail-smtp-in.l.google.com      AAAA IPv6 address = 2404:6800:4008:c05::1a
alt1.gmail-smtp-in.l.google.com AAAA IPv6 address = 2607:f8b0:4023:c0b::1b
nslookup -type=txt gmail.com
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

gmail.com       text =

        "v=spf1 redirect=_spf.google.com"
gmail.com       text =

        "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
2023217 13:54:32
nslookup -type=mx outlook.com
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

outlook.com     MX preference = 5, mail exchanger = outlook-com.olc.protection.outlook.com
nslookup -type=txt outlook.com
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

outlook.com     text =

        "google-site-verification=DC2uC-T8kD33lINhNzfo0bNBrw-vrCXs5BPF5BXY56g"
outlook.com     text =

        "v=spf1 include:spf-a.outlook.com include:spf-b.outlook.com ip4:157.55.9.128/25 include:spf.protection.outlook.com include:spf-a.hotmail.com include:_spf-ssg-b.microsoft.com include:_spf-ssg-c.microsoft.com ~all"
outlook.com     text =

        "google-site-verification=0iLWhIMhXEkeWwWfFU4ursTn-_OvoOjaA0Lr7Pg1sEM"
2023217 13:54:32
nslookup -type=cname www.yahoo.co.jp
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

www.yahoo.co.jp canonical name = edge12.g.yimg.jp
nslookup -type=a www.yahoo.co.jp
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

名前:    edge12.g.yimg.jp
Address:  183.79.219.252
Aliases:  www.yahoo.co.jp

2023217 13:54:32
nslookup -type=cname www.google.com
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

google.com
        primary name server = ns1.google.com
        responsible mail addr = dns-admin.google.com
        serial  = 510093512
        refresh = 900 (15 mins)
        retry   = 900 (15 mins)
        expire  = 1800 (30 mins)
        default TTL = 60 (1 min)
nslookup -type=a www.google.com
サーバー:  UnKnown
Address:  2404:1a8:7f01:b::3

名前:    www.google.com
Address:  142.251.42.196

以降は
・空ログファイル作成
・nslookupスクリプト実行
を繰り返す。繰り返すことで、複数ログファイルができ、それをdiffることで差分を確認できる。

余談

久々にPowershell使ったけど、構文が長くて大変。

マルーン5とか久しく聞いてなかったですが、ボーカルが嫁さんいるのにスキャンダルしたとニュースがあった。でも、この人らの歌っていつもそういう歌(愛する人がいるけれど、他の誰かも好きになって”行動しちゃった”系。ちょっと同じ人間としてどうかしてる、非常に動物的な雰囲気の歌詞)だったじゃないですが・・・。なんの驚きもないっす。「でしょうね」としか思えなかった。
ちなみに私はこの歌(のリズム)が好きです。当然歌詞はクズいです。
Makes Me Wonder Closed Captioned - Maroon5

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?