オンラインソフトを使え! 「第18回 NBTscan」NetworkWorld 2005年3月号
Windowsネットワークを管理する上で、LAN上にどのようなWindowsマシンが存在するか、またそれらがどのようなサービスを提供しているかなど、各Windowsマシンの状況を把握することは非常に重要である。今回は、LAN上に存在するWindowsマシンのNetBIOS名を効率的にスキャンするツール「NBTscan」を紹介しよう。 NBTscanとはNBTscanは、リモートコンピュータのNetBIOS名テーブルをネットワーク経由で調査するツールである。Windows系のシステム管理者であれば、おそらく「nbtstat」というコマンドを一度は使用した事があるだろう。nbtstatはリモートコンピュータのNetBIOS名テーブルを参照する場合などに使用する、Windows標準のコマンドである。NBTscanは、基本的にnbtstatのNetBIOS名テーブル参照機能と同じ機能を有する。ただしnbtstatが一度の実行で一つのリモートコンピュータに対してしか問い合わせできないのに対し、NBTscanはその名の通り複数のコンピュータやネットワーク全体をスキャンすることができる。 NetBIOS(Network Basic Input/Output System)は昔からWindowsプラットフォームのネットワーク・コンポーネントとして重要な位置を占めてきた(図1)。Windows 2000以降、NetBIOSを用いることなくファイル共有等のTCP/IP通信を行う「Direct Hosting(TCP/445を使用)」が導入されたため、今では基本的にNetBIOSを使用しなくてもWindowsネットワークの通信が可能になっている。一方で、NTや9xシリーズとの下位互換性を保つために、Windows 2000やXP等の新しいOSにおいてもNetBIOSはデフォルトで有効に設定されている。
アプリケーションがNetBIOS通信を行う場合、通信相手のホストやネットワークサービスは「NetBIOS名」という名前で指定することになる。そのため、NetBIOS機能が有効になっているWindowsシステムは、起動時に自分が提供するサービスに関するNetBIOS名(コンピュータ名等)をネットワーク環境に論理的に登録(提示)する。 NBTscanやnbtstatコマンドは、そのホストがどのようなNetBIOS名を提供しているかを、ホスト自身に対して問い合わせ、その結果(すなわちNetBIOS名テーブル)を表示するのである。 ターゲットホストに対してNetBIOS名を問い合わせることにより、そのホストのコンピュータ名、ドメイン名(あるいはワークグループ名)、稼動しているNetBIOS関連サービス、ローカルログオンユーザ名などを知ることができる。 NBTscanのインストールNBTscanは以下のサイトからダウンロードすることができる。 http://www.inetcat.org/software/nbtscan.htmlUNIXやLinuxでNBTscanを使用する場合は、このページの上の方にある「Download NBTscan sources」のリンクをクリックし、ソースコードファイル「nbtscan-1.5.1.tar.gz」を入手した後、適当なディレクトリに展開して以下の一連のコマンドを実行する。 ./configure make make installこれにより、/usr/local/binディレクトリの下にnbtscanという実行ファイルがインストールされる。 Windows上で動作するNBTscanについては、Cygwin環境下であればUNIXと同様の手順でソースコードファイルからビルドすればよいが、上記サイトにてWin32用の実行ファイルを提供しているので、それをダウンロードするのが手っ取り早い。「Download NBTscan binaries for Win32」のリンクをクリックして、「nbtscan1_5_1.zip」をダウンロードし、ZIPファイルに含まれる「nbtscan.exe」と「cygwin1.dll」を適当なディレクトリに展開すればOKである。 NBTscanを以下のようにパラメータなしで実行することにより、NBTscanのヘルプ情報を表示することができる。 nbtscan表1に、NBTscanがサポートするオプションの一覧を示す。
一覧モードで実行するNBTscanには、スキャン結果を一覧で表示する「一覧モード(デフォルト)」と、得られたNetBIOS名をすべて表示する「詳細モード(-vオプションを指定)」の二種類の実行モードがある。 まずはNBTscanを一覧モードで、ネットワーク全体に対して実行してみよう。 以下のコマンドラインにより、192.168.183.0のクラスCネットワークに対して、一覧モードでスキャンが行われる。 nbtscan 192.168.183.0/24ネットワークアドレスに後続する「/24」は、サブネットマスクのビット長を表している。IPアドレスの指定方法は「192.168.183.1-254」のような範囲指定でも構わない。 図2に、上記NBTscanコマンドラインの実行結果を示す。
一覧モードではこのように、ホストごとに一行ずつ取得した情報の概要が表示される。それぞれの項目は次のような意味を持つ。 IP address スキャンしたホストのIPアドレス NetBIOS Name ホストのコンピュータ名(WorkstationサービスのNetBIOS名) Server ファイルサーバかどうか(Serverサービスの実行状況) User ログオンユーザ(MessengerサービスのNetBIOS名) MAC address NICのMACアドレス「User」の項目には基本的に現在ローカルログオンしているユーザ名が表示されるが、他のコンピュータ上で同一ユーザがログオンしている場合にはコンピュータ名が表示される等、必ずしも常にログオンユーザ名が表示されるとは限らない。 図2でIPアドレス「192.168.183.11」のMACアドレスが「00-00-00-00-00-00」となっている。このホストではLinux上でSambaサーバが動作しているのだが、SambaはNetBIOS名の問い合わせに対してMACアドレスを返さないため、このように表示されている。 ちなみにNetBIOS名に関するリクエストは、UDPのポート137番に対して通信されるため、ファイアウォール等でUDP/137がブロックされている環境下ではNBTscan(およびnbtstat)は使用できない。 詳細モードで実行するNBTscanを詳細モードで実行するには、コマンドラインに「-v」オプションを指定する。 図3は、単一のホスト「192.168.183.12」に対して詳細モードでNBTscanを実行したところを表している。
これは、Windows標準のnbtstatコマンド「nbtstat -A 192.168.183.12」で得られる結果と基本的に同じであり、ターゲットホストが提供しているNetBIOS名テーブル全体を表示している。 ここで少しNetBIOS名について説明をしておこう。NetBIOS名とは、アプリケーションがNetBIOS通信する際に、通信相手を識別するために用いる「識別子」のことである。Windowsネットワークで使用されるNetBIOS名は、15バイトの「文字列部分」と1バイトの「サフィックス部分」で構成される。 図3の出力結果の中では、「Name」の項目がNetBIOS名の文字列部分に相当し、「Service」の項目がサフィックス部分に相当している。文字列部分はコンピュータ名、ドメイン名/ワークグループ名、ユーザ名といったようにノードの名称を表し、サフィックス部分はそのホストにおける「機能」あるいは「サービス」の種類を表す。 またそのNetBIOS名がネットワーク上で唯一の存在であるような性質を持つ場合は、「Type(種類)」の項目に「UNIQUE」と表示され、ネットワーク上で複数存在する場合は「GROUP」と表示される。 NetBIOS名がどのような意味を持つかは、その文字列の内容、サフィックス、および種類によって決定される。マイクロソフトはこれらの一覧表を、「NetBIOSサフィックス(NetBIOS名の16番目の文字)」というWebページ(URL:http://support.microsoft.com/default.aspx?scid=kb;JA;163409)で公開しているので、詳細についてはそちらを参照してほしい。表2はその中から主要なものを抜粋して示したものである。
この表を見れば、それぞれのNetBIOS名の意味を知ることができるのだが、いちいちこのような一覧表を参照して対応付けるのは大変である。 そのためNBTscanには、NetBIOS名の文字列とサフィックス、および種類を自動的に判断し、そのNetBIOS名がどのような機能に対応しているか、人が見てわかるように表示するオプション「-h」が用意されている。 図4に、「-v」オプションと「-h」オプションを指定してNBTscanを実行した結果を示す。
「-v」オプションだけを指定した際の結果と比べると、どの名前がどのような機能に対応しているかが非常によくわかる。 ちなみにこの出力結果から、ターゲットホスト「192.168.183.12」に関する以下のような情報を得ることができる。
その他のオプションNBTscanには以上のオプションの他に、スキャンして得られたNetBIOS名の利用あるいは加工を行いやすくするため、各種のフォーマットで出力するオプションが用意されている。 -eオプション-eオプションを指定してNBTscanを一覧モードで実行すると、次のようにIPアドレスとホスト名のみが出力される。192.168.183.11 TARGET-A 192.168.183.12 TARGET-B 192.168.183.131 PC-SHIO-XPPRO 192.168.183.133 PC-SHIO-NT4 192.168.183.150 MS-3LC0JBWG4EDU 192.168.183.151 PC-SHIO-XPSP2この出力はホスト名のIPアドレス解決に用いられる「hostsファイル」(UNIX系では/etc/hosts、Windowsでは%SystemRoot%\system32\drivers\etc\hosts)のフォーマットに合わせたものとなっており、そのままhostsファイルに取り込んで使用することができる。 -lオプション-lオプションを指定してNBTscanを一覧モードで実行すると、次のようにIPアドレスとホスト名、および「#PRE」という文字列が出力される。192.168.183.11 TARGET-A #PRE 192.168.183.12 TARGET-B #PRE 192.168.183.131 PC-SHIO-XPPRO #PRE 192.168.183.133 PC-SHIO-NT4 #PRE 192.168.183.150 MS-3LC0JBWG4EDU #PRE 192.168.183.151 PC-SHIO-XPSP2 #PREこの出力結果は、NetBIOS名のIPアドレス解決に用いられる「lmhostsファイル」(%SystemRoot%\system32\drivers\etc\lmhosts)のフォーマットに合わせたものとなっており、そのままlmhostsファイルに取り込んで使用することができる。ちなみに「#PRE」の指定はNetBIOSコンポーネントの初期化の際に、そのエントリをキャッシュにプリロードすることを意味している。 -sオプション-sオプションはセパレータ文字を指定することで、各項目をその文字で区切って出力する。例えば「-s :」のように「:(コロン)」をセパレータとして指定し、NBTscanを一覧モードで実行すると、以下のような出力結果が得られる。192.168.183.11:TARGET-A :これは、NBTscanの出力を他のプログラムで処理する際などに有用であろう。 またNetBIOS名のスキャンを効果的かつ確実に実施するために、以下のようなオプションも用意されている。 -tオプションNBTscanはデフォルトではリクエストに対するレスポンスパケットを、1,000ミリ秒(つまり1秒)待ってタイムアウトする。通常のLAN環境ではこのデフォルトのタイムアウト時間で十分だと考えられるが、トラフィック状況やネットワーク帯域、また相手ホストの負荷状況によってはタイムアウトをより長く設定する必要が生じる。そのような場合、「-t 2000」のように-tオプションにタイムアウトの値(ミリ秒)を設定すれば、タイムアウト時間を長く(あるいは短く)することができる。 -bオプション-bオプションはリクエストパケットの送出間隔を調整し、狭いネットワーク帯域でのスキャンでパケットロスが発生しないようにする。例えば9,600bpsのネットワーク帯域でNBTscanを実行する場合には、「-b 9600」のようにbpsの値を指定する。 -mオプション-mオプションはリクエストパケットの送出回数を指定する。デフォルトでは各々のターゲットIPアドレスに対して1発のリクエストパケットを送出するが、「-m 2」のように-mオプションにパケット送出回数を指定することにより、レスポンスが返ってこなかったIPアドレスに対して指定した回数を上限にリクエストパケットを再送する。-rオプションNBTscanはリクエストパケット送出時に、デフォルトでは自動的に割りあてられる1024以上の番号をソースポート番号として使用する。通常はこれで問題ないのだが、NBTscanのドキュメントによると、ターゲットホストがWindows 95の場合はソースポート番号を137番としてリクエストパケットを送出しない限り、正しくレスポンスが返らない。-rオプションを指定することによって、NBTscanはソースポートがUDP/137に固定されたリクエストパケットを送出するようになり、Windows 95に対しても適切にスキャンすることが可能となる。 ただしWindows版のNBTscanでは、この-rオプションは使えないようになっているため、-rオプションを使う場合はUNIX版をroot権限で実行する必要がある。
2004年12月執筆 |