Win10: PowerShellを使って連続IP→ホスト名解決をする

システム運用やネットワーク管理をしていると、IPアドレスからホストネームを、ホストネームからIPアドレスを検索する機会が多々あります。2,3回検索すれば済むケースが殆どですが、時々一日中名前解決していることがあります。
Unixならまとめて一気に名前解決できる jdresolve コマンドがあるので困りませんが、Windowsだとそういう便利なコマンドが全部オプションなので、与えられたPCしかない環境で大量のIPアドレス→ホスト名 変換を行う必要が発生すると、Windowsの nslookup を何度も何度も Copy&Paste しながら実行しなくちゃいけないので大変です。

検索する数が多い時は作業する気力が無くなるので、それに備えてスクリプトを書くことにしました。スクリプトといってもわずか数行。

  1. IPアドレス一覧を保存したテキストファイルを保存する
  2. 保存したテキストファイルを一行ずつ読み込んで nslookup を行い
  3. 不要な行を削除してホスト名とIPアドレスを表示し
  4. ファイルが無くなるまでループする

まず、IPs.txt というテキストファイルに調べたいIPアドレスを書きます。

<IPs.txt>

113.36.217.33
113.36.53.229
113.36.63.96
113.37.111.122
113.37.135.116
113.37.136.138
113.37.158.34
113.37.30.210
113.38.210.210
113.39.2.54
113.40.102.77

<c_nslookup.ps1>

foreach ($lookup in (Get-Content "C:\Users\usagi\Documents\IPs.txt")){
    nslookup $lookup 8.8.8.8 | Select-String -NotMatch "サーバー" | Select-String -NotMatch "8.8.8.8"
}

1行目にIPアドレスを保存したファイルのパス、2行目にコマンドとフィルター。select-string コマンドで、不要な行を削除しています。

Powershell ISE から実行すればジャーナル画面に目的の情報が表示されます。ちなみに、powershell から OSの nslookup コマンドをバッチで使う場合は、

nslookup <検索したいホスト情報> <DNSサーバー>

の順に指定するそうです。8.8.8.8 は google の公開DNS。

以下が実行結果、8.8.8.8 は遠いので、時々タイムアウトなどホスト情報以外が赤字で表示されます。

名前:    113x36x217x33.ap113.ftth.ucom.ne.jp
Address:  113.36.217.33


名前:    113x36x53x229.ap113.ftth.ucom.ne.jp
Address:  113.36.53.229

DNS request timed out.
    timeout was 2 seconds.

名前:    113x36x63x96.ap113.ftth.ucom.ne.jp
Address:  113.36.63.96


名前:    113x37x111x122.ap113.ftth.ucom.ne.jp
Address:  113.37.111.122


名前:    113x37x135x116.ap113.ftth.ucom.ne.jp
Address:  113.37.135.116


名前:    113x37x136x138.ap113.ftth.ucom.ne.jp
Address:  113.37.136.138


名前:    113x37x158x34.ap113.ftth.ucom.ne.jp
Address:  113.37.158.34

nslookup : *** google-public-dns-a.google.com が 113.37.30.210 を見つけられません: Non-existent domain
発生場所 C:\Users\thonda\Documents\powershell\c_nslookup.ps1:2 文字:5
+     nslookup $lookup 8.8.8.8 | Select-String -NotMatch "サーバー" | Selec ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (*** google-publ...existent domain:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 

DNS request timed out.
    timeout was 2 seconds.

名前:    113x38x210x210.ap113.ftth.ucom.ne.jp
Address:  113.38.210.210


名前:    113x39x2x54.ap113.ftth.ucom.ne.jp
Address:  113.39.2.54


名前:    113x40x102x77.ap113.ftth.ucom.ne.jp
Address:  113.40.102.77

IPs.txt の中に記述する情報は、IPアドレスだけじゃなく、ホストネームでも構いません。
IPアドレス→ホスト名 でも、
ホスト名→IPアドレス でも、名前解決できます。

コメントを残す