2011-02-03 6 views

答えて

1

によって、その後あなただけ行うことができ、このポートは、サーバーのアプリケーションで使用できることを、あなたは意味「ポート開いている」場合:

あなたは上のオープンサーバソケットができない場合にIOExceptionがスローされます
try { 
    serverSocket = new ServerSocket(port); 
} catch (IOException e) { 
    System.out.println("Could not listen on port: " + port); 
    // ... 
} 

をこのポート。

「ファイアウォールでブロックされていない」とは、ネットワーク外のホストからこのポートにアクセスできる場合、外部ネットワークからのホスト:ポートへの接続を開かずにこれを確認する直接の方法はありません。サービスが開始されるホストと、サービスに接続しようとする可能性のあるホストとの間に、他のファイアウォール/ NATが存在する可能性があります。

外部ネットワークからのサービスアクセシビリティを確認できるいくつかの一般的なテクニックがあります。たとえば、NAT traversalを参照してください。

+0

これを試してみましたが、** ANY **ポートの例外はスローされません!何故ですか?私は 'netstat'を実行し、そこにリストされているポートは、ESTABLISHED、CLOSE_WAIT、TIME_WAIT、LISTENINGのいずれかである - 例外をスローせずに動作する! – GPX

+1

ローカルマシンにリスニングソケットを作成できるかどうかをテストするだけで、ファイアウォールが開いているかどうかはテストされません(ファイアウォールでブロックされていないことを教えてください)着信接続または発信接続の場合は、ファイアウォールだけを意味しますか、着信接続の場合には適切なポート転送が必要なNATゲートウェイも意味します)。あなたはどんなポートでも、1から65536までのすべてのポートを意味しますか? – nos

+0

@nosポートが同じネットワーク上の他のマシンとの間で着信および発信接続に使用できることを確認する必要があります。はい、1から65535までのすべてのポートを意味します。 – GPX

2

ポートが着信接続で開いているかどうかを確認しますか?ファイアウォールに尋ねる必要があります。ポートを聴いたが、このポートはファイアウォールによってブロックされているとしたら、「永遠に」待つだろう。

唯一の方法は、ネットワーク/マシンの外にある小さなサーバーを外して、遠隔からそのマシンの特定のポートへの接続を確立するように依頼することです。リモートサーバーは、接続できたかどうかを(異なるチャネル上で)返信することができます。

もう1つのアイデア:ウェブ上の多くのポートテストサービスの1つを使用してください。グーグル "ポートテストオンライン"いくつかの結果を提供します。

2

ソケットを使用すると、ネットワーク内の2台のマシンを接続できます。

  1. パーソナルファイアウォール、両側の両側に企業の
  2. ファイアウォール:この方法にはいくつかのfilrewallsがあるかもしれません。
  3. 両側のISPのファイアウォール。

ファイアウォールは

  • 特定のポート
  • 特定のプロトコル
  • トラフィックの方向を

    1. 特定IPを遮断するように構成することができる
    また

    異なる2(/アウトバウンドで)状況はTCPの視点から同じように見える:

    1. サーバーは、まもなく(上記参照)ポート
    2. ファイアウォールブロック接続へ

    を聞いていない第1あなたがテストしたい何をすべきかを決定する必要があります。たとえば、特定のマシンの特定のポートnew Socket(host, port)に接続して例外をキャッチできることを知りたい場合は、ファイアウォールがあなたを悩ませたり、リモートが応答しなかったりする状況を区別したい場合は、十分ではありません。

    この場合、他の参照が必要です。たとえば、リモートホストにHTTPサーバーがあり、ファイアウォールでブロックできる他のプロプライエタリサーバーがあることがわかります。まず、HTTP接続を確立して(ホストが有効かどうかを確認して)、ソケットに接続しようとします。 HTTPが動作し、ソケットがおそらくファイアウォールでブロックしていない場合

  • 関連する問題