IPアドレスの衝突などのトラブルが発生した場合は、そのIPアドレスを使用しているホスト(コンピュータ)を特定しなければならない。Windows OSでIPアドレスからホスト名(コンピュータ名)を求めるためには、nbtstatコマンドを利用するとよい。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象OS:Windows 7/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016
TCP/IPプロトコルを使ったネットワークを運用する場合、IPアドレスやホスト名は同一ネットワーク上で重複しないように管理する必要がある。TCP/IPでは、IPアドレスで通信相手を特定、識別しているため、お互いに異なるIPアドレスを割り当てておかないと、正しい通信相手と通信できなくなるためだ。
今どきのネットワークでは、IPアドレスの割り当てにはDHCPを利用するため、重複を避けることは難しいことではない。だがそれでも、例えばサーバとして利用するなら、管理しやすいIPアドレスを優先的に割り当てたいだろう。このようなケースでは、まず目的のIPアドレスが使われていないかどうか、もし使われているなら、どのPCに割り当てられているのかを調べる必要がある。
またネットワークのトラブルシューティング作業においても、IPアドレスの割り当て状況の調査が必要になることが少なくない。例えばあるプロセスが大量の通信トラフィックを発生させているので、その通信相手がいったいどのPCなのかを特定したい、といった場合だ。
netstatコマンド(TIPS「TCP/IP通信の状態を調べるnetstatコマンドを使いこなす」参照)やarpコマンド(TIPS「WindowsのARPコマンドで通信先を特定する」参照)を利用すれば、通信相手のIPアドレスは分かるが、それがどのPCかを特定するには、その「ホスト名」(Windows OSでは「コンピュータ名」という)の情報も知りたいところである。
ホスト名は通常、管理者やユーザーがある意図を持って命名していることが多い。組織内で利用するPCなら、ルールに基づいて名前を付けているだろうし、個人のPCならユーザー名や型番などに基づいて名前を付けていることが少なくない。なのでコンピュータ名が分かれば、多数のPCがあったとしても、それがどのPCであるかを特定しやすくなる。
IPアドレスからホスト名を調べる絶対的に確実な方法はないが、相手がWindows PCで、同じネットワーク(組織)内に存在するなら、比較的成功率の高い方法がある。「nbtstat.exe」というコマンドを利用する方法である。以下、その方法を紹介する。
Windows OSの場合、「IPアドレスからそのPCが持つコンピュータ名を確認する」には、コマンドプロンプト上で「nbtstat -A <IPアドレス>」コマンドを実行する。場合によっては「-A」ではなく、「-a」オプションでも動作するが、正しくは「-A」オプションを利用すること。
表示された幾つかの情報のうち、「名前」の末尾が「<00>」で、「種類」が「一意」となっている行に注目していただきたい。その行の左側に表示されている「名前」が、そのPCのコンピュータ名である。
なおローカルのPCにネットワークインタフェースが複数装備されていたり、相手からの応答がなかったり(非Windows PCの場合に多い)した場合は、「ホストが見つかりませんでした」と表示されることがあるが、その部分は無視して、表示された「名前」に注目する。
各PCに実際に付けられている名前は、対象PCの「システムのプロパティ」画面を開くと、「コンピューター名」という欄で確認できる。この名前は通常、ユーザーや管理者がWindow OSのインストール時に設定するが、それをリモートから確認するのが上のコマンドである。
「nbtstat -A <IPアドレス>」というコマンドは、<IPアドレス>で指定されたPCのコマンドプロンプト上で、「nbtstat -n」コマンドを実行するのと同じ意味を持つ。-nオプションは、そのWindows PCの保持している「NetBIOS名前テーブル」を出力させるためのオプションである。実際に先ほどの対象となっているPC上で「nbtstat -n」コマンドを実行した場合の例を次に示す。
NetBIOSとは、Windowsネットワークで使われている、非常に基本的なプロトコルである。現在のWindowsネットワークはTCP/IP上で動作する「NBT(NetBIOS over TCP/IP)」を使っているが、「NetBIOS」という低レベルのネットワークAPIを使ってWindows PC同士が通信したり、ファイル共有を実行したりしていた。NetBIOSでは、IPアドレスではなく、最大15文字までの「名前(NetBIOS名)」を使ってお互いを識別していた。
その名前情報を管理しているのが名前テーブルである。WindowsネットワークやNetBIOS、NBTなどの詳細については次の記事を参照していただきたい。
名前テーブルに表示されている情報の詳細は次の通りである。
フィールド名 | 意味 |
---|---|
名前(Name) | 名前。NetBIOS名と呼ばれる。16bytes長。1〜15byte目が名前で、16byte目はNetBIOS名の種類を表す |
種類(Type) | 単一名かグループ名かなどの区別。各ホストごとに固有の名前は「単一(UNIQUE)」だが、ワークグループ名やドメイン名の場合は「グループ(GROUP)」と表示される。「グループ」は複数のマシン上に同時に存在する |
状態(Status) | 登録済みかどうかの状況。通常は「登録済(Registered)」となっている |
nbtstatコマンドで表示されるNetBIOS名情報 NetBIOSを使った通信では、IPアドレスではなく、「名前」で通信相手やサービス(ドメイン名、提供しているサービスなど)を識別している。名前の最後の1byteには特別な意味があり、16進数で<00>や<20>などのように表現する。その意味については上記のWindowsネットワークの解説記事参照。 |
nbtstatコマンドの実行結果のうち、NetBIOS名の種類(最後の1byte)が「<00>」で、かつ「種類」フィールドが「一意(UNIQUE)」のエントリはそのマシンの名前(NetBIOSホスト名すなわちコンピュータ名)を表している。
nbtstatコマンドは、NBTを利用してNetBIOS名の一覧を取得している。そのため、非Windows OSのシステム、NBTの機能を持っていないデバイス(スマートフォンやデジカメ、その他の非PCデバイスなど)だったり、ファイアウォールでブロックされていてNBTで通信できなかったりする場合には、実行しても結果は得られない。
また、NBTは一般的に組織内でのファイル共有に使われる機能であるため、たとえWindows OSであっても、ローカルのネットワーク上にはない場合(インターネット上にあるコンピュータの場合)は、ファイル共有のポートはブロックされているのが普通なので、この場合もホスト名を調べることはできない。このような場合は別の方法(例えばTelnetやWebブラウザで接続してみたり、パケットをキャプチャ&解析するツールを使ったりするなど)で確認することになる。
ただWindows OSでなくても、Windows OSと同じファイル共有機能を持っているデバイスならば(例:NASやハードディスクレコーダーなど)、ホスト名が表示されることもある。
なお、本TIPSでは、IPアドレスからコンピュータ名を取得する方法を紹介しているが、逆にコンピュータ名からIPアドレスを求めたいこともあるだろう。その方法についてはTIPS「Windowsでホスト名からIPアドレスを見つける方法」を参照していただきたい。
■関連記事(Windows Server Insider)
■更新履歴
【2018/04/05】最新OSに合わせて内容を更新しました。
【2011/04/08】Windows Vista/Windows 7/Windows Server 2003/Windows Server 2008/Windows Server 2008 R2に関する情報を追加しました。
【2000/10/07】初版公開。
Copyright© Digital Advantage Corp. All Rights Reserved.