私がsuper-dupper-appというデスクトップソフトウェアを持っているとしましょう。super-dupper-appが実行されているこのローカルネットワーク上のすべてのコンピューターを検出できるようにしたいと思います。
一般的なポインタは本当にありがたいです。Pythonポインターまたはスニペットのボーナスポイント。
私がsuper-dupper-appというデスクトップソフトウェアを持っているとしましょう。super-dupper-appが実行されているこのローカルネットワーク上のすべてのコンピューターを検出できるようにしたいと思います。
一般的なポインタは本当にありがたいです。Pythonポインターまたはスニペットのボーナスポイント。
簡単な答えは、Pythonでマルチキャストパケットを使用することです。「ZeroConf」、別名mDNS / DNS-SDを実装するavahiのpythonバインディングもあると思います。これは、マルチキャストの上に実装され、車輪の再発明を行う必要がなく、より標準的である必要があります。
マルチキャストは、ユニキャスト(1つのホストに送信されるパケット)とブロードキャスト(すべてのホストに送信されるパケット)の中間に位置し、ホスト(通常はそれらで実行されるアプリケーションを介して)が特定のマルチキャストグループへの関心を登録できるようにします。マルチキャストトラフィックは、適切なサポートにより、ルーターとスイッチを通過できます。このアイデアは、サブスクライブされたすべてのホストにパケットを送信するための最小スパニングツリーを構築することです。IPv4では、マルチキャストは224/4サブネットを使用します。IPv6の場合、これはff00 ::/8です。イーサネットでは、マルチキャストアドレスはMACアドレスにマッピングされます(つまり、MACアドレスのマルチキャストビットが1に設定されます)。これにより、マルチキャストストリームの効率的なフィルタリングが可能になります。
たとえば、RIPv2を実行しているルーターは、マルチキャストを使用して他の隣接ルーターを検出し、RIPに関心のないホストに迷惑をかけることなくルートを共有します。
mDNS / Bonjour / Rendevouzは、1つのマルチキャストグループを使用して、LAN上で利用可能なサービスを一覧表示するDNSスタイルのメッセージを共有する自動サービス検出へのアプローチです。