jCIFSとか
今、仕事で jCIFS つー、SMB(Windowsのファイル共有とか)クライアントのためのライブラリを利用してます。
でも時々うまく動かなくて、原因を調査・・・NetBIOSとかSMBの勉強しちったよっ!
いくつかわかったことを、メモ。
- ワークグループ一覧の取得は、<01><02>__MSBROWSE__<02>(リソース種別はx01)名前で取得されるマスターブラウザに接続して、SMBを使用
- ワークグループに属するホスト一覧の取得は ワークグループ名(リソース種別はx1D) で取得されるマスターブラウザに接続して、SMBを使用
- ネットワーク構成によっては、 <01><02>__MSBROWSE__<02>に複数のホストが応答したりする
- VMWareの入っているPCの場合、VMWareの仮想NICが持つIPを返すことがある。この場合、異なるサブネットなので、アクセスに失敗する
とか。ほかにもいくつか分かったけど、書くのが( ゜Д゜)マンドクサなんで、スルー。
NICが二枚挿さっているPCや、VMWareの入っているPCがマスターブラウザになっている場合、うまく動かないことがあるようです。
ワークグループ、やホストの一覧を表示するには
- NetBIOS(のネーミングサービス?)を使用して、マスタブラウザの名前(NetBIOS over TCP/IPの場合 <ホスト名>/IPアドレス かな?)を取得
- マスタブラウザに接続し、SMBを使用してワークグループやホストの一覧を取得
というのが基本の流れっぽい。
SMBを利用する場合はほぼこの流れかと。NBT(つーかネーミングサービス?)で名前解決、SMBで情報取得。
ちなみに、マスタブラウザの名前を取得するのはブロードキャストを利用して、問い合わせ要求をサブネット内に流します。そうすると、マスタブラウザが返答してくれます。
jCIFS は名前解決で、最初に返答を返してきたホスト以外と通信しないため、ホスト一覧を取得しても微妙に足りなかったりします。
ワークグループ、ホスト一覧の取得だけ自前で書いてしまおうか悩み中・・・
ちなみに、WINSに関する設定はサブネットを越えない場合は無くても問題なく動きます。<jCIFS