[nbtstat]IPアドレスからホスト名やMACアドレスを調べるには

院内ヘルプデスクbat, nbtstat

私の病院では大規模なネットワークの変更を伴う作業があって、サーバーからPCに至るまで全てのIPアドレスが変わりました。その際ツールを作成して、事前にIPを変更するように設定していたのですが、ネットワーク帯が予実と異なっている場所があったため、ネットワークにつながらないPCやプリンタなどが複数出てきました。

IPの重複

そうすると、システム課が呼ばれるので、その場でIP帯を調べて新規IPを振りなおして、ネットワークにつながる機器のアドレスをExcelで管理していたのですが、その場その場の手作業で更新していたので、入力ミスや記入漏れなどが発生してしまいました。

その影響で他の場所でIPの重複が起こり、また別のPCのアドレスを振りなおしていました。事前にpingなどで使っていないことを確認するのですが、たまたまPCが立ち上がってなかったりするので、後になって発覚することも度々起こりました。

解決方法の模索

pingなどで疎通確認をする際、IPアドレスを知らなくてもホスト名(PC名)でも疎通確認することができます。これはホスト名からIPアドレスを紐づけしているためホスト名からIPアドレスを検索してpingを飛ばしています。

そこで、IPアドレスからホスト名やMACアドレスを取得して、現在の実際に稼働しているネットワークと比べて問題ないか比較することはできないか調査してみました。

nbtstat

NBT (NetBIOS over TCP/IP) というの使用して、IPアドレスからホスト名やMACアドレスを調べられるnbtstatというコマンドがありました。

下記にように使用するとIPアドレスから各種情報を取得することができます。(自宅のNASNEという録画機器に向けて飛ばした情報です)

C:\Windows\system32>nbtstat -A 192.168.11.2
イーサネット:
ノード IP アドレス: [192.168.11.2] スコープ ID: []
​
           NetBIOS リモート コンピューター ネーム テーブル
​
       名前               種類         状態
    ---------------------------------------------
    NASNE-*****   <00>  一意          登録済
    WORKGROUP      <00>  グループ        登録済
​
    MAC アドレス = 00-00-00-00-00-00

PCによっては他にも情報が見つかる場合や、ホストが見つからない場合もあるのですが、見つかった場合だと目的のホスト名(NASNE-*****)やMACアドレスを取得することができました。

使用例

しかしこのままだと、いちいち画面を確認して対象の項目をコピペする必要があるので、実用的ではありません。

そこでコマンドラインの出力を必要な情報だけテキストファイルに出力してみることにしました。

下記のbatでtest.txtというファイルにIPアドレスとホスト名、MACアドレスを出力します。

for /l %%i in (1,1,5) do (
echo 192.168.11.%%i && ^
nbtstat -A 192.168.11.%%i|find "<20>" && ^
nbtstat -A 192.168.11.%%i|find "MAC"
)>>test.txt

for文で調べたい範囲を記述しておき、カッコ内で出力したい情報を書きます。そして最後に>>test.txtで出力するファイル名を書くことで出力結果をテキストファイルで残せます。

出力結果は以下のようになります。

192.168.11.1 
  xxxxxxxxx <20> 一意         登録済
  MAC アドレス = 00-00-00-00-00-00
192.168.11.2
  NASNE-*****   <20> 一意         登録済
  MAC アドレス = 00-00-00-00-00-00
192.168.11.3
...

注意として、batファイルの名前をbatファイル内で使用しているコマンド名で保存しないことがあります。私ははじめ安易にnbtstat.batと保存してしまい、実行するとループ処理が走り想定通りに動きませんでした。

編集後記

実はIPを振りなおす作業中に、IPアドレスからホスト名を調べられるんじゃないかと思い、とりあえずつながることを優先して作業していました。上司からはきちんと記録しろと注意されましたが、大規模作業中であちこちから電話が入り、またExcelが入っていないためその場で編集できない場合もあったので、大変でした。

一応後でExcelファイルにも書き直し、こうして調べられる方法も見つけたのでとりあえず一安心ですが、もっとスマートな方法はなかったかと日々見つけ出すことが大切だと思いました。