システム運用やネットワーク管理をしていると、IPアドレスからホストネームを、ホストネームからIPアドレスを検索する機会が多々あります。2,3回検索すれば済むケースが殆どですが、時々一日中名前解決していることがあります。
Unixならまとめて一気に名前解決できる jdresolve コマンドがあるので困りませんが、Windowsだとそういう便利なコマンドが全部オプションなので、与えられたPCしかない環境で大量のIPアドレス→ホスト名 変換を行う必要が発生すると、Windowsの nslookup を何度も何度も Copy&Paste しながら実行しなくちゃいけないので大変です。
検索する数が多い時は作業する気力が無くなるので、それに備えてスクリプトを書くことにしました。スクリプトといってもわずか数行。
- IPアドレス一覧を保存したテキストファイルを保存する
- 保存したテキストファイルを一行ずつ読み込んで nslookup を行い
- 不要な行を削除してホスト名とIPアドレスを表示し
- ファイルが無くなるまでループする
まず、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アドレス でも、名前解決できます。