10対応】Windowsでホスト名からIPアドレスを見つける方法コンピュータ名からIPアドレスを求めることを名前解決という。Windowsネットワークでは、NetBIOS系とTCP/IP系の2種類の名前解決がある。NetBIOSによる名前解決の結果を調べるには、NetBIOSの名前キャッシュを使う。TCP/IPの場合はpingコマンドが便利だ。2016TIPS「WindowsでIPアドレスからホスト名(コンピュータ名)を見つける方法」では、与えられたIPアドレスから、そのコンピュータ名を見つける方法を解説したが、本TIPSではその逆に、あるコンピュータ名やホスト名からそのIPアドレスを見つける方法を紹介する。名前を指定してあるサーバに接続させてみたが、どうも間違ったコンピュータに接続しているようだ、といった場合に利用できる。TCP/IP)といったプロトコルが標準的に使われているが、これらのプロトコルでは、名前(ホスト名やコンピュータ名、マシン名)やFQDN名など)やIPアドレスが重要な意味を持っている。TCP/IPは基本的にはIPアドレスさえあれば動作するプロトコルであるが、IPアドレスは人間にとっては覚えにくく扱いにくいものであるため、通常はホスト名やホスト名にドメイン名を加えたFQDN名(例:www.atmarkit.co.jp)が利用される。NetBIOSは、基本的にはNetBIOS名という文字列をベースにして動作するサービスである。現在のネットワークは、(基本的には)TCP/IPベースで構築されているので、最終的にはIPアドレスを使って相手のコンピュータと通信していることになる。そのため、コンピュータ名やFQDN名、NetBIOS名などをIPアドレスに対応付けなければならない。このような名前とIPアドレスの対応付け(名前からIPアドレスを求めること、もしくはその逆操作)は名前解決と呼ばれる。名前解決は比較的コストの大きい処理であり、例えばIPパケットを1回送信するたびに行うことは現実的ではない。そこで、一度変換(取得)した名前解決の結果はキャッシュに格納しておき、名前解決が必要な場合はまずキャッシュの中を検索する。このようなキャッシュ動作は、ネットワークのさまざまな場所で行われている。キャッシュはパフォーマンスの改善には役立つが、場合によっては古いキャッシュデータを返してしまうという可能性もある。コンピュータの名前(コンピュータ名やドメイン名)を変えたり、IPアドレスを変えたりした場合、変更前の情報がいずれかのキャッシュに残っていると、間違った相手に対して通信しようとする可能性がある。ネットワークの構成を変更したり、接続するネットワークを変更したりした場合に、相手に接続できない、もしくは間違った相手に接続している、といったトラブルが生じたら、あるコンピュータ名が実際にどのIPアドレスに名前解決されているかを調べ、それが正しいかどうかを検証する必要がある。本TIPSでは、Windowsネットワークにおける名前解決の方法についてまとめておく。Windowsネットワークにおける名前解決の方法は?Windowsネットワークにおける名前解決の手段には、大きく分けて2つの種類がある。1つはNetBIOSを利用したサービスにおける名前解決であり、もう1つはTCP/IPにおける名前解決である。NetBIOS名前解決は、NetBIOSを利用したサービスで使われる名前解決の手段である。view」といったNet系コマンド、(古いバージョンの)ファイル共有サービスやプリンタ共有サービスなどで使われている。一般にWindowsネットワークというと、これらのサービスを指すことが多い。lmhostsファイル(デフォルトでは「%windir%\system32\drivers\etc\lmhosts」)やNetBIOSブロードキャスト、WINSなどで実際の名前解決の手段として利用されている。1つのTCP/IPにおける名前解決とは、UNIXやLinuxを中心とする、TCP/IPネットワークの世界で培われてきた名前解決の手段である。具体的には、「ping」「telnet」「ftp」「Webブラウザ」「メールアプリケーション」などで利用されている。「NISサーバの概要」参照)などが、実際の名前解決の手段として利用されている。この2つの名前解決は、現在のWindowsネットワークでは相互に補完しながら動作するように設計されているため、その違い(境界)が分かりづらいが、トラブルシューティングなどの場合には、それらの違いを意識する必要がある。NetBIOS(NBT)における名前解決の調査方法NetBIOS(NBT)プロトコル環境において、あるコンピュータ名(名前)がどのIPアドレスに名前解決されているかを知ることは、Windowsネットワークにおけるトラブルシューティングの第一歩である。-a」コマンドを使う方法が簡単だ。これはNetBIOS(NBT)プロトコルを使って指定されたコンピュータに接続する機能を持ったコマンドである。APIを使って名前解決が行われるが、その名前解決の結果がNetBIOS名前キャッシュに保存される。これを表示させると、コンピュータ名がどのようなIPアドレスに変換されたのか分かる。具体的には、次のような3つのコマンドを連続して実行する。-R」は、現在のNetBIOSの名前キャッシュをクリアするコマンドであり、次のコマンドの結果を分かりやすくするために必要なものだ。\\<コンピュータ名>」のようなコマンドでも構わない(ただしNetBIOSプロトコルがファイアウォールなどでブロックされていると、これらの手法は使えない)。-c」は、名前解決の結果が含まれるNetBIOSの名前キャッシュを表示させるコマンドである。-R」でキャッシュをクリアしているので、キャッシュには最新のNetBIOS名前解決の結果だけが含まれているはずである。実際にこのコマンドを実行すると、次のようになる(キャッシュのクリアには、管理者権限のあるコマンドプロンプト上での実行が必要)。NetBIOS名前キャッシュの確認NetBIOS(NBT)で利用される名前は、NetBIOS名前キャッシュに一定期間保存される。このキャッシュの内容を見ると、指定したNetBIOS名がどのIPアドレスに解決されたかが分かる。これが目的のIPアドレスと異なる場合は、NBT系の設定を確認する必要がある。ここでは、「WINPC001」というコンピュータ名を指定してNetBIOS名前解決をさせている。最後のキャッシュの表示結果を見ると、この名前に対するIPアドレスは「ホストアドレス」のフィールドより、「10.20.2.108」であることが分かる。これが求めるNetBIOS名前解決の結果である。「継続時間[秒](キャッシュの寿命)」の値が「598(秒)」(=約10分)となっているが、一度解決された結果はデフォルトでは約10分間有効であるため、このような表示になっている。-c」を実行すると、1秒ずつカウントダウンしていることが分かるだろう。この値が「0」になるとキャッシュから削除され、以後は必要に応じてまたNetBIOS名前解決が実行される。表示された結果のうち、継続時間の値が「-1」となっているエントリが幾つかあるが(ここでは「EXAMPLE」と「EXAMPLE-DC1」)、これらはlmhostsという静的なファイル中で事前定義されたエントリであり(lmhostsファイル中で、#PREや#DOMを使って指定している)、無限の寿命を持っていることを表している。lmhostsファイルを使用していない場合、このようなエントリは表示されないので、結果を調査する場合は注意すること(逆に言うと、これらのファイルに設定しておくと、強制的に接続先を変更できるということでもある)。NetBIOSにおける名前解決の手段には、NetBIOSブロードキャストを使った直接問い合わせの他、WINSサーバへの問い合わせや、lmhostsファイルの参照など、さまざまな方法が存在する(次の図参照)。このようにNetBIOSの名前キャッシュの内容を調査すれば、その結果を簡単に知ることができる。TCP/IPプロトコル(その2)」を参照のこと。現在のNetBIOSはTCP/IPと密接に結び付いているので、いろいろな名前解決手段が複合的に利用されている。これはNBTにおける名前解決の手段とその優先度を表す図であり、目的のIPアドレスが見つかるまで上から順に実行する。PCは「h(ハイブリッド)ノード」タイプなので、まずWINSサーバに問い合わせ、その後NetBIOSのブロードキャストを使って名前解決を試みる。TCP/IPにおける名前解決TCP/IPにおける名前解決を調査する一番簡単な方法は、pingコマンドを使うことだろう(TIPS「Windowsの『ping』コマンドでネットワークトラブルの原因を調査する」)。pingの引数でコンピュータ名やFQDN名を指定すると、最初にホスト名とそれに対応するIPアドレスが表示される。これを見ることで、指定された名前がどのIPアドレスとして名前解決されているかを確認できる。pingを使って名前からIPアドレスを求めるpingコマンドはTCP/IP(のみ)を使うコマンド。通信に先立って、指定された宛先(ホスト名やFQDN名など)からIPアドレスを求め、その情報を表示する。この例では、「WINPC001」というコンピュータ名のIPアドレスは「10.20.2.108」であることが分かる。このIPアドレスが本来通信したいIPアドレスと異なっていた場合は、TCP/IPの名前解決の仕組みに基づいて調査する必要がある。TCP/IPにおける名前解決では、実際にはDNSやhostsファイル(デフォルトでは「%windir%\system32\drivers\etc\hosts」)、WINSなどを組み合わせて名前解決を行っている。それらの結果は適宜キャッシュされるので、場合によってはそれらのデータベース間で不整合が生じることもある(ホスト名やIPアドレスの設定などを変更したり、接続するネットワークを変更したりした場合などに不整合が発生することが多い)。そのため、トラブルシューティング時にはサービスごとの名前解決やキャッシュの内容を詳しく調査しなければならないことがある。具体的な調査方法を簡単に述べると次のようになる。●静的な名前解決の調査hostsやlmhostsファイルの内容を表示させたり、メモ帳で開いたりして確認する。/displaydns」を実行すると、DNSクライアント側にある名前解決結果のキャッシュ内容が表示される。DNSサーバから得られた結果はキャッシュに保存され、キャッシュの内容が優先される(有効期限はDNSサーバ側で個別のDNSレコードごとに設定されている)。DNSサーバ側でDNSレコードを変更しても、クライアント側のDNSのキャッシュに古いレコード(過去にキャッシュに記録されたレコード)が存在すれば、そちらが優先されることがある。/flushdns」を使ってDNSのクライアント側のキャッシュを破棄させることにより、DNSサーバへのアクセスを強制的に行わせることができる。DNSサービス利用時の名前解決の挙動については、以下の記事も参照のこと。●DNSサーバ側のキャッシュの調査DNSサーバは、DNSクライアントからの要求に応答するために、他のDNSサーバに対する問い合わせ結果を自分自身でもキャッシュしている(このようなDNSサーバを「キャッシュDNSサーバ」という)。この内容を確認するには、nslookupコマンドを使うか、DNSの管理ツールを使ってDNSサーバの持つキャッシュの内容を直接表示させる(次のTIPS参照)。●WINSサーバのデータベースの調査TCP/IPでも、NBTの名前解決の結果得られたIPアドレスを利用することがある。そのため、NBTの名前解決結果のキャッシュ(ローカルPCのNetBIOS名前キャッシュや、lmhostsファイル、WINSサーバの設定やそのキャッシュ)も調査しなければならない。2018/04/19】最新状況を反映して更新しました。【2004/01/17】初版公開。Reserved.ページトップに戻る。