- PR -

ネットワーク上の相手がWindowsかを確認するには

投稿者投稿内容
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2006-10-18 10:22
【環境】
Active Directory
WindowsXP SP2 / パーソナルファイヤーウォールOFF
C# 2005
実行ユーザーはDomain Adminsに所属する専用ユーザー

【やりたいこと】
ネットワーク上の相手がWindowsかを確かめて後続処理を流したい。

【やったこと】
次のようなプログラムを作成しています。
1.PingでIPの活死を確認します。
2.活きている場合Processでnmapを起動しフィンガープリントを見て
 Windowsかを判断します。
3.やりたい処理を実行します。
ドメインに所属していないPCや通信機器も対象になるのでこのような
方法をとりました。Pingに応答しないものはしょうがないという
ことにしています。

【質問】
やったことの2.で一応望みどおりの処理にはなっています。
.net的にいまいちかっこ悪いのですが、WMIなどで確認するよりも
かなり速いのでこの方法をとりました。
# 特にWMIセッションがはれないでエラーになるような場合の待ち時間が
# 気になりました。

私ならこうやるというようなアドバイスがあればいただけませんでしょうか。
お願いいたします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-10-18 12:21
どの様な構成のシステムなのか?なぜ相手がWindowsである事を確認する必要があるのかと言う話が抜けているので、なんともアドバイスのしようが無いです。

ですが、私ならあなたの実装案は一蹴します。主な要因は以下の3つです。
・Firewallを無効にしなくてはならない。過去のウィルス騒ぎを忘れましたか?
・将来的に正しくOSを認識できる保証が無い。あなたの使っているフィンガープリンティング技術の本質を理解していますか?
・上記二つに対応するため、新たなセキュリティ対策が必要になる。

各クライアントのセキュリティを下げたり、任意にクライアントの設定を変更したり、ActiveDirectoryを利用したりしているなら、もっと現実的な対応方法が有るとおもいます。

[ メッセージ編集済み 編集者: 甕星 編集日時 2006-10-18 12:27 ]
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2006-10-18 16:45
甕星さんありがとうございます。

> どの様な構成のシステムなのか?
IPを静的に振っています。
192.168.0.1-192.168.0.100に機器が100台あります。
そのうち
192.168.0.1-192.168.0.10がWindowsやLinuxのサーバー、
192.168.0.10-192.168.0.90がWindowsの端末で
192.168.0.91-192.168.0.100がルータやハブなどの通信機器とします。
これが本当につないでよいマシンかを調べたいと思いました。
例えばWindows端末のIPレンジでLinuxを上げていないかとか
本来端末がないレンジから端末の接続がないかとかを
ラウンドロビンで調べてロギングしようと思いました。

最初はWMIで作っていましたが、Windowsだとわからず
コネクトを張ろうと思うとエラーが帰ってくるまでだんまりに
なってしまうので何とかこれを回避したいと考えてこんなのに
なってしまいました。もしかしたらタイムアウトの細かい設定が
あったりしてもっとうまくできるのかもしれないですが。。。

> Firewallを無効にしなくてはならない。
> 過去のウィルス騒ぎを忘れましたか?
話を単純化するためであって別に気にしていないわけではありません。
監視プログラムが位置するPCからだけ受け入れるような設定で
いいかと思います。それでもNGでしょうか。

> 将来的に正しくOSを認識できる保証が無い。
> あなたの使っているフィンガープリンティング技術の
> 本質を理解していますか?
通信パターンからデータベースを引いているというのが
本質かはわからないですが、そういうものだ程度の認識です。
おっしゃっていることはもっともなので違う方法がないかを
お伺いしたつもりです。

> 各クライアントのセキュリティを下げたり、
> 任意にクライアントの設定を変更したり、
> ActiveDirectoryを利用したりしているなら、
> もっと現実的な対応方法が有るとおもいます。
甕星さんの考えてらっしゃる現実的な対応方法というのを
お聞かせいただけませんでしょうか。足りない情報があれば
ご指摘ください。お願いいたします。


渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-10-18 17:22
完全な方法は無いでしょうね。
(チューリングテストって知ってます?)

ドメイン環境なんだから、ディレクトリで確認するのが安全なんじゃないですか?
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2006-10-18 18:10
渋木宏明(ひどり)さんありがとうございます。

> 完全な方法は無いでしょうね。
> (チューリングテストって知ってます?)
wikipediaみました。
偽装/詐称される可能性があるという理解をしましたがあってますでしょうか。

> ドメイン環境なんだから、ディレクトリで確認するのが安全なんじゃないですか?
通信機器などが対象になっているのとIPアドレスとADの絡み方を考えると
どのようなアプローチか浮かびません。なんかヒントをいただけませんでしょうか?
ADとは離れますがSNMPなどが現実解なのでしょうかね。。。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-10-18 21:56
だから「なぜ相手がWindowsである事を確認する必要があるのか?」と言うのが鍵だと思いますよ。「確認してから後続処理に流したい」との事ですが、何故確認したいのかわかりません。

「確認しないと後続処理で問題が生じる」なら、それってそもそもの原因は後続処理のバグなんじゃないの?だったらバグを直したらよいんじゃないの?

どんな処理なのか知らないけど、そのプロトコルにOSを確認するためのシーケンスを加える事は出来ないの?クライアントプログラムが存在するなら、クライアントにOSの種類を取得させればよい。

そもそも各クライアントの設定を変更して歩くことが許されるなら、OSの種類をサーバーに通知するアプリケーションをインストールしたって良いですよね。

Windowsか否か判別不能の時には、Windowsではないと見直して良いのですよね?そうでなければ「疑わしきはWindowsと見なす=全てWindouwsと見なす」って状況になりますよね。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-10-18 23:30
引用:
# 特にWMIセッションがはれないでエラーになるような場合の待ち時間が
# 気になりました。



これに関して一言。
非同期実行してやればいいだけのような。
[訂正]Thread 複数たててやればそれほど気にならないような。[/訂正]

[追記]望ましい方法としては、AD の computer account を query してやればいいでしょう。[/追記]

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2006-10-18 23:46 ]
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2006-10-19 01:31
> だから「なぜ相手がWindowsである事を確認する必要があるのか?」
> と言うのが鍵だと思いますよ。
必要ありなしでいえばなしです。

例えば後続の処理が
コード:

ManagementScope scope = new ManagementScope("\\192.168.0.1\...")


を流しているとします。WMI非対応のルータなどのアドレスにこいつを
要求した場合、数秒ルーチンが応答待ちにはいると思います。
応答が返ってこないので数秒経過後タイムアウトします。
この応答待ち時間をなるべく発生させたくなかっただけです。

> 「確認しないと後続処理で問題が生じる」なら、
> それってそもそもの原因は後続処理のバグなんじゃないの?
> だったらバグを直したらよいんじゃないの?
nampのロジックをはずしても動きます。
ただ非Windowsに食つこうとしたときにタイムアウトするのに
時間が(数秒)かかるだけです。タイムアウト=後続を実行しないと
しています。

> そもそも各クライアントの設定を変更して歩くことが許されるなら、
> OSの種類をサーバーに通知するアプリケーションをインストールしたって
> 良いですよね。
相手はクライアントだけではなく通信機器やプリンタなどもあります。
よってエージェントレスでと考えてこのようなものを作っています。

> Windowsか否か判別不能の時には、Windowsではないと見直して良いのですよね?
> そうでなければ「疑わしきはWindowsと見なす=全てWindouwsと見なす」って
> 状況になりますよね。
事前に調査した情報(Windowsか否か)とつき合わせます。
事前取得の情報と異なる場合は調査対象としてマークします。
# これについては最初から説明しろと怒られそうですが。。。

動作のイメージとしては
NetRAP SAMPLE(http://www.vector.co.jp/soft/winnt/net/se260340.html)
とか
NetCrunch(http://www.adremsoftware.jp/netcrunch/index.php)
のようなものの自動検出/リスティングの機能だけを抽出したものを
ただ自作してるだけなのです。で、状態が変わったらアラートを出すみたいなのを
どんどん足していこうかなと思っていました。

質問の仕方がまずかったと久しぶりにへこんでいます。。。

スキルアップ/キャリアアップ(JOB@IT)