Webカメラなどについていて、ネットワーク内の自社製カメラのIPアドレスを表示してくれるツールと同じようなことを実現したいです。
探したいデバイスは、自作または既製品です。
自分なりに考えると、ブロードキャストアドレスとかをうまく使うのかと思いますが、それをどうやってプログラムすれば実現するのか検討がつきません。
どなたかヒントでもいいのでアドバイスください。
言語はC#がベストですが、他の言語(Java、C、VB、Perl、Python、Ruby)でも構いません。
自作のデバイスは、WindowsXp上で動くWindowsサービスです。
このサービスに実装すべきもの(あるプロトコルに応答できるようにするとか)も提示してもらえると助かります。
SNMP(Simple Network Management Protocol)をキーワードに探すといいと思います。
@IT:監視を自動化するSNMP(1)
http://www.atmarkit.co.jp/fnetwork/rensai/snmp01/01.html
Rubyで超お手軽SNMP!
指定したIP範囲に対し順次pingを発行し、ヒットしたIPに対しては問い合わせのプロトコル(SNMPが使えるならSNMPで)を出してみてはどうでしょう。
.NET Frameworkでしたら ping クラスが利用できると思います。
JavaやPHP、Rubyでは直接発行できないと思うので、ping コマンドを叩くのが無難でしょう。
回答ありがとうございます。
なるほど。pingですか。
とすると、同一セグメント内にデバイスが複数あれば、それだけ時間がかかるということですね・・・
もうちょっと効率のいい方法ってないんでしょうか?
既製品も対象とするなら、順次echo(ping)コマンドでスキャンでしょう。
以下のURLが参考になると思います。
回答ありがとうございます。
2番目の方と同じ手法ですね。やはりそれしかないんですかね・・・
既成のものに対しては適用できなくなりますが、
IPレイヤではなくデータリンクレイヤ(DIXv2/802.3)でのブロードキャストパケットを
raw socket (SOCK_RAW)上でやりとりすることを考えてください。
ゴミパケットを撒き散らかさないように。
回答ありがとうございます。
ただ・・・使われている用語(データリンクレイヤ、raw socket)がわかりません・・・
意味はネットで調べるとしても、それをどうやってプログラムするのでしょうか?
できればそのあたりのヒントをおねがいします。
socket インターフェース (API)はこちら。
http://msdn.microsoft.com/ja-jp/library/system.net.sockets.socke...
raw socket を使ったプログラミング(に必要な知識)は、
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
こちらを。
回答ありがとうございます。
SNMPはすでに使用してします。ただ、今回の目的はIPアドレスが不明なので、SNMPだとどうしようもないと判断しました。
説明が不足していました。すいません。