ユーザーが (さまざまな方法で) 入力した一連の IP アドレスから、どのマシンと通信できるソフトウェアが実行されているかを特定したいと考えています。
基本的なプロセスは次のとおりです。
これらのアドレスに ping を実行して、使用可能なマシンを見つけます
利用可能なマシンの既知のソケットに接続します
正常に確立されたソケットにメッセージを送信します
期待される応答と応答を比較する
ステップ2〜4は私にとって簡単です。.NET で最初のステップを実装する最良の方法は何ですか?
System.Net.NetworkInformation.Ping クラスを見ています。プロセスを高速化するには、複数のアドレスに同時に ping を実行する必要がありますか? 長いタイムアウトで一度に 1 つのアドレスに ping を実行すると、永遠にかかる可能性があります。しかし、タイムアウトが短いと、利用可能なマシンを見逃してしまう可能性があります。
アドレスがアクティブなマシンを指していることがわかっている場合でも、ping が失敗しているように見えることがあります。リクエストが破棄された場合、ping を 2 回行う必要がありますか?
さらに、ネットワーク ケーブルを抜いた状態で大量のアドレス コレクションをスキャンすると、Ping は FreeUnmanagedResources() で NullReferenceException をスローします。!?
このような一連の IP をスキャンするための最良のアプローチについての指針はありますか?