1

私は現在、大学のプロジェクトの更新に取り組んでいます。問題のプログラムはIPアドレスにアクセスし、IPがWebサイトをホストしているかどうかを判断します。このシステムの目標は、Webのサイズを決定することです(使用可能なシステム全体に分散され、最後の実行には2.5か月かかりました)。

IPの正確な決定を下すのにかかる時間を短縮するという現在の目標ですが、これを改善することはできません。現在、以下がテストの主なソースです(もちろん追加のロジックもあります)。

Socket s = new Socket();
s.connect(new InetSocketAddress(address, 80), timeout);

私が主に探している/助けを求めているのは、IPが正確でありながらWebサイトをホストしているかどうかを判断するためのより高速な方法があるかどうかです。現在のシステムは30秒のタイムアウト値を使用しているため、多くのIPがWebサイトをホストしていないため、多数のIPアドレスチェックには30秒が必要です。Javaライブラリまたはアルゴリズムに関する論文を指摘する助けをいただければ幸いです。

ありがとう。

4

4 に答える 4

0

ホストが特定のポートで Web ページを提供する意思があるかどうかを判断する唯一の信頼できる方法は、それを要求することです。これにより、常に TCP ソケットが開かれ、HTTP GET 要求が送信されます。ただし、NMAP http://nmap.org/の手法 (および c-libraries) を使用して、:80 に TCP エンドポイントがあるかどうかを効率的に検出できます。もちろん、パブリック IP ごとに、同時に数千のホストをチェックするようにプログラムを調整できます...

ただし、アプローチ全体では、ポート 80 で非常に漠然とした数の Web サーバーしか得られないことに注意してください。他のポート、暗号化 (SSL)、および測定を台無しにする http ホストごとの複数の Web サイトがあります。そして、IPv4 と IPv6 があることを忘れないでください。

于 2012-05-30T15:01:28.527 に答える
0

昨日提案されたように、Nmap は間違いなくこれに適した選択です。その道をたどることを選択した場合は、sourceforge.net に Nmap4j という名前の Java ラッパー ライブラリがあり、Java プログラムへの統合が容易になります。

乾杯!

于 2012-05-31T16:47:46.467 に答える
0

もちろん、これを並行して行っています。つまり、別のソケットを試すまで 30 秒間ブロックしませんか?

同時に開くことができるソケットの数には制限がありますが、同時に開くことができるソケット数は少なくとも 100 である必要があります。

于 2012-05-30T14:53:16.397 に答える
-2

ここにすべてのポートのリストがあります:

http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers  

最初に行うことは、ポートの検索範囲を制限することです。
次に、使用されている「通常の」ポート (80、8080、443、...) を試します。待機秒数は制限できません。

于 2012-05-30T15:06:06.477 に答える