連載
» 2004年01月17日 00時00分 公開

Tech TIPS:Windowsでホスト名からIPアドレスを見つける方法

コンピューター名からIPアドレスを求めることを名前解決という。Windowsネットワークでは、NetBIOS系とTCP/IP系の2種類の名前解決がある。NetBIOSによる名前解決の結果を調べるには、NetBIOSのネーム・キャッシュを調べる。TCP/IPの場合はpingコマンドが便利だ。

[打越浩幸,デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 2000 Professional/Windows XP Professional/Windows XP Home Edition/Windows 2000 Server/Windows 2000 Advanced Server/Windows Server 2003



解説

 Windowsネットワークでは、TCP/IPNBT(NetBIOS over TCP/IP)といったプロトコルが標準的に使われているが、これらのプロトコルでは、名前(ホスト名やコンピューター名、マシン名)やFQDN名など)やIPアドレスが重要な意味を持っている。TCP/IPは基本的にはIPアドレスさえあれば動作するプロトコルであるが、IPアドレスは人間にとっては覚えにくく扱いにくいものであるため、通常はホスト名やホスト名にドメイン名を加えたFQDN名が利用される。一方NetBIOSは、基本的にはNetBIOS名という文字列をベースにして動作するサービスである。しかし現在広く利用されているNBTでは、TCP/IP上でNetBIOSのサービスを実現しているため、一般ユーザーの立場からすると、この2種類のプロトコルの境界は非常にあいまいであるといえる。

 ネットワークが基本的にはTCP/IPベースで構築されている以上、最終的にはIPアドレスを使って相手のコンピュータと通信するわけであるが、そのためにはコンピューター名やFQDN名、NetBIOS名などをIPアドレスに対応付けなければならない。このような名前とIPアドレスの対応付け(名前からIPアドレスを求めること、もしくはその逆操作)は名前解決と呼ばれる。名前解決は比較的コストの大きい処理であり、例えばIPパケットを1つ送信するたびに行うことは現実的ではない。そこで、一度変換(取得)した名前解決の結果はキャッシュに格納しておき、名前解決が必要な場合はまずキャッシュの中を検索している。このようなキャッシュ動作はネットワークのさまざまな場所で行われる。

 キャッシュはパフォーマンスの改善には役立つが、場合によっては古いキャッシュデータを返してしまうという可能性もある。例えばコンピュータの名前(コンピューター名やドメイン名)を変えたり、IPアドレスを変えたりした場合、変更前の情報がいずれかのキャッシュに残っていると、間違った相手に対して通信しようとする可能性がある。ネットワークの構成を変更した場合に、相手に接続できないといったトラブルが生じた場合は、あるコンピューター名が実際にどのIPアドレスに名前解決されているかを調べ、それが正しいかどうかを検証する必要に迫られることも少なくない。本TIPSでは、Windowsネットワークにおける名前解決の方法についてまとめておく。

操作方法

 Windowsネットワークにおける名前解決の手段には、大きく分けて2つの種類がある。1つはNetBIOSを利用したサービスにおける名前解決であり、もう1つはTCP/IPにおける名前解決である。

 NetBIOS名前解決は、NetBIOSを利用したサービスで使われる名前解決の手段である。具体的には、例えばnet useやnet viewといったNetコマンド、ファイル共有サービスやプリンタ共有サービスなどで使われている。一般にWindowsネットワークというと、これらのサービスを指すことが多い。LMHOSTSファイル(デフォルトでは「%windir%\system32\drivers\etc\lmhosts」)やNetBIOSブロードキャスト、WINSなどで実際の名前解決の手段として利用されている。

 もう1つのTCP/IPにおける名前解決とは、UNIXを中心とする、TCP/IPネットワークの世界で培われてきた名前解決の手段である。具体的には、例えばpingやtelnet、ftp、Webブラウザ、Outlook Expressのようなメール・アプリケーションなどで利用されている(NetBIOSサービスではなく、WinSockサービスを使っているものが多い)。HOSTSファイルDNS、NIS(Network Information System)、IEN116(DNSが普及する以前によく使われていた)などが実際の名前解決の手段として利用されている。

 この2つの名前解決は、現在のWindowsネットワークでは相互に補完しながら動作するように設計されているため、その違い(境界)が分かりづらいが、トラブルシューティングなどの場合にはそれらの違いを意識する必要がある。

●NetBIOS(NBT)における名前解決の調査

 NetBIOS(NBT)プロトコル環境において、あるコンピューター名(名前)がどのIPアドレスに名前解決されているかを知ることは、Windowsネットワークにおけるトラブルシューティングの第一歩である。

 NetBIOSにおける名前解決の結果を確認するためには、TIPS「WindowsでIPアドレスからホスト名(コンピューター名)を見つける方法」と同様に「nbtstat -a」コマンドを使う方法が簡単でよい。これはNetBIOS(NBT)プロトコルを使って指定されたコンピュータに接続する機能を持ったコマンドである。これを実行すると、指定された名前に対してNetBIOSレベルで名前解決が行われるが、その名前解決の結果がNetBIOSネーム・キャッシュに保存される。これを表示させると、コンピューター名がどのようなIPアドレスに変換されたのか分かる。具体的には、次のような3つのコマンドを連続して実行する。

nbtstat -R
nbtstat -a <NetBIOS名>
nbtstat -c



 最初の「nbtstat -R」は、現在のNetBIOSネーム・キャッシュをクリアするコマンドであり、次のコマンドの結果を分かりやすくするために必要なものである。2つ目の「nbtstat -a <NetBIOS名>」は、指定されたコンピュータに対してNetBIOSプロトコルを使って接続するコマンドであるが、これ以外にも例えば「net view \\<コンピューター名>」のようなコマンドでも構わない(ただしNetBIOSプロトコルがファイアウォールなどでブロックされていると、これらの手法は使えない)。

 最後の「nbtstat -c」は、名前解決の結果が含まれるNetBIOSネーム・キャッシュを表示させるコマンドである。最初に「nbtstat -R」でキャッシュをクリアしているので、キャッシュには最新のNetBIOS名前解決の結果だけが含まれているはずである。

 実際にこのコマンドを実行すると、次のようになる。

C:\>nbtstat -R ……キャッシュのクリア
    Successful purge and preload of the NBT Remote Cache Name Table.

C:\>nbtstat -a winpc001 ……NetBIOS名前解決の実行

ローカル エリア接続:
Node IpAddress: [192.168.2.155] Scope Id: []

           NetBIOS Remote Machine Name Table

       Name               Type         Status
    ---------------------------------------------
    WINPC001       <00>  UNIQUE      Registered
    WINPC001       <03>  UNIQUE      Registered
    D-ADVANTAGE0   <00>  GROUP       Registered
    D-ADVANTAGE0   <1E>  GROUP       Registered
    WINPC001       <20>  UNIQUE      Registered
    USER03         <03>  UNIQUE      Registered

    MAC Address = 00-E0-4C-AB-26-6E


C:\>nbtstat -c ……キャッシュ内容の表示

ローカル エリア接続:
Node IpAddress: [192.168.2.155] Scope Id: []

                  NetBIOS Remote Cache Name Table

        Name              Type       Host Address    Life [sec]
    ------------------------------------------------------------
    SERVER01       <03>  UNIQUE          192.168.2.51        -1
    SERVER01       <00>  UNIQUE          192.168.2.51        -1
    SERVER01       <20>  UNIQUE          192.168.2.51        -1
    WINPC001       <20>  UNIQUE          192.168.2.231       602 ……結果のIPアドレス
    WINPC001       <00>  UNIQUE          192.168.2.231       602
    D-ADVANTAGE0   <1C>  GROUP           192.168.2.51        -1



 ここでは、「WINPC001」というコンピューター名を指定してNetBIOS名前解決をさせている。最後のキャッシュの表示結果を見ると、この名前に対するIPアドレスは「192.168.2.231」であることが分かる。これが求めるNetBIOS名前解決の結果である。「Life(継続時間。キャッシュの寿命)」の値が「602(秒)」となっているが(=約10分)、一度解決された結果はデフォルトでは約10分間有効であるため、このような表示になっている。しばらく時間をおいて再度「nbtstat -c」を実行すると、1秒ずつカウント・ダウンしていることが分かるだろう。

 なお表示された結果のうち、Lifeの値が「-1」となっているエントリがいくつかあるが(ここでは「SERVER01」と「D-ADVANTAGE0」)、これらはLMHOSTSという静的なファイル中でプリロードされたエントリであり(LMHOSTSファイル中で、#PREや#DOMを使って指定している)、無限の寿命を持っていることを表している。LMHOSTSファイルを使用していない場合はこのようなエントリは表示されないので、結果を調査する場合は注意していただきたい。

 NetBIOSにおける名前解決の手段には、NetBIOSブロードキャストを使った直接問い合わせのほか、WINSサーバへの問い合わせや、LMHOSTSファイルの参照など、さまざまな方法が存在するが、このようにNetBIOSネーム・キャッシュの内容を調査すれば、その結果を簡単に知ることができる。

●TCP/IPにおける名前からIPアドレスへの変換を調べる

 TCP/IPにおける名前解決を調査する一番簡単な方法は、pingコマンドを使うことだろう。pingの引数でコンピューター名やFQDN名を指定すると、最初にホスト名とそれに対応するIPアドレスが表示される。これを見ることで、指定された名前がどのIPアドレスとして名前解決されているかを確認することができる。

C:\>ping winpc001

Pinging winpc001 [192.168.2.231] with 32 bytes of data:
                  ↑↑↑↑↑↑……IPアドレス
Reply from 192.168.2.231: bytes=32 time<1ms TTL=128
Reply from 192.168.2.231: bytes=32 time<1ms TTL=128
Reply from 192.168.2.231: bytes=32 time<1ms TTL=128
Reply from 192.168.2.231: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.2.231:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms



 この例では、「winpc001」というコンピューター名のIPアドレスは「192.168.2.231」であることが分かる。

 TCP/IPにおける名前解決では、実際にはDNSやhostsファイル(デフォルトでは「%windir%\system32\drivers\etc\hosts」)、WINSなどを組み合わせて名前解決を行っている。さらに、それらの結果は適宜キャッシュされるので、場合によってはそれらのデータベース間で不整合が生じることもある(ホスト名やIPアドレスの設定などを変更した場合に不整合状態になる可能性が高い)。そのため、トラブルシューティング時には各サービスごとの名前解決やキャッシュの内容を詳しく調査しなければならないことがある。

 具体的な調査方法を簡単に述べると次のようになる。

■静的な名前解決の調査
 hostsファイルの内容をエディタなどで確認する。

■DNSのクライアント側キャッシュの調査
 コマンド・プロンプト上で「ipconfig /displaydns」を実行すると、DNSのクライアント側リゾルバ・キャッシュの内容が表示される(リゾルバとは、名前解決を担当するモジュールのこと)。DNSサーバ側でDNSレコードを変更しても、クライアント側のDNSのキャッシュに古いレコード(過去にキャッシュに記録されたレコード)が存在すればそちらが優先されることがある。このような場合は、「ipconfig /flushdns」を使ってDNSのクライアント側のキャッシュを破棄させることにより、DNSサーバへのアクセスを行わせることができる。

■DNSのサーバ側のキャッシュの調査
 DNSサーバは、クライアントからの要求にこたえるため、ほかのDNSサーバに対する問い合わせ結果を自分自身でもキャッシュしている(このようなDNSサーバをキャッシュDNSサーバという)。この内容を確認するには、nslookupコマンドを使うか、DNSの管理ツールを使ってDNSサーバの持つキャッシュの内容を直接表示させる。

■WINSサーバのデータベースの調査
 WINSの管理ツールを使ってデータベースの内容を表示させ、調査する。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。