人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

IP MessengerやAppleのBonjour、Sambaで、同じLANのPC(IPアドレス)を自動で認識していますが、そういうアルゴリズムはどのようにやっているのかを教えてください。
できればRubyでのやり方もお願いします。(処理が遅い等の文句はなしで。)

●質問者: Shota Fukumori
●カテゴリ:コンピュータ インターネット
✍キーワード:Apple Bonjour IP Messenger IPアドレス LAN
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Mook
●27ポイント

そのあたりのことは一度 TCP/IP の仕組みを系統的に学習してみるとよいかと思います。


同じサブネット内に対して一斉に通信を送るブロードキャスト通信があります。


あるアプリケーションがこれでブロードキャストメッセージを送り、(通常)同じアプリケーションは

これに応答するようにプログラムされているので、アプリケーション同士が認識できるようになります。

◎質問者からの返答

ふむふむ。なるほど。 ブロードキャストですか。

自分は最初そのアプリが使用するポートにつないでみて、応答があったら〜っていうのを考えたんですが、

よく考えたら

・他のアプリがそのポートを使用していた

・そもそもIPアドレスがわからない

という欠点が。


2 ● pahoo
●13ポイント

BonjourはZeroconfという技術で、正確にはIPアドレスが不要になっているわけではありません。

そのアルゴリズムについては、「ZeroConfをベースとして設定不要なネットワーク構築を実現」を参照ください。さらに詳しいドキュメントへのリンク集として「Bonjour」が役立つでしょう。

Bonjourのオープンソース・プロジェクトである「Avahi」のソースも参考になります。

Rubyで実装されるのでしたら、ハッシュマップを利用するのがよいでしょう。

◎質問者からの返答

なるほど。Bonjourは別の技術なのですか。

やっぱりブロードキャストの方が簡単ですかねー。

ソースを読むのは得意ではなくて;


3 ● いわどん
●40ポイント

RubyとBonjourでしたらnet-mdnsライブラリはいかがでしょうか。

ドキュメントに書かれているサンプルコードで動作を確認できます。

◎質問者からの返答

なぬ!

これはいいかもですね・・。

検討してみます。


4 ● ken33jp
●10ポイント

>自分は最初そのアプリが使用するポートにつないでみて、応答があったら〜っ

>ていうのを考えたんですが、

>よく考えたら

>・他のアプリがそのポートを使用していた

>・そもそもIPアドレスがわからない

自マシンのIPアドレスとサブネットマスクが分かりますので、

同じセグメントに属しているIPはすべて分かります。

すべてに投げて応答が返ってきたら、採用します。

同じポートで別アプリが立ち上がっていても、応答文の内容で

自ソフトかどうかは分かります。

1度、応答があったらIPアドレスとMACアドレスを保存しておいて

次回からそれを採用します。

また、近くのIPメッセーんジャーを1つ見つけたら、そこには

情報がすでにありますので、1回のアクセスで複数のマシン情報が

取得できます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ