2011-08-28 15 views
6

私はクライアントマシンが接続するサーバーを持っています。最近私はstunnelとの接続を暗号化することにしました。クライアントプログラムはサーバーに直接接続するのではなく、localhost:8045に接続しました(チェックして、このポートは占有されていません)。localhostへの接続が拒否されるのはなぜですか?

Javaコード:

URL url = new URL("http://localhost:8045/malibu/GetProviders"); 
InputStream stream = url.openStream(); 

そして、私は、次の取得:

java.net.ConnectException: Connection refused: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
    at java.net.Socket.connect(Socket.java:519) 
    at java.net.Socket.connect(Socket.java:469) 
    at java.net.Socket.<init>(Socket.java:366) 
    at java.net.Socket.<init>(Socket.java:180) 
    . . . 

私はcurlを使用して同じページを要求しようとした場合、すべてが正常です。

このような現象は何が起こる可能性がありますか?

EDIT:はい、リスニングソケットがある - ランニングnetstat -avn | grep 8045ができます:

tcp6  0  0 ::1:8045    :::*     LISTEN 
+1

URLでhttps://を試したことがありますか? –

+2

@Dave:(1)これはstunnelの仕組みではありません。 (2)このエラーは明らかにTCPレベルの接続拒否であり、アプリケーションレベルのネゴシエーションエラーではありません。 – cdhowie

+0

あなたのIPアドレスをURLで試してみてください。 – nIKUNJ

答えて

11

リスニングソケットは、IPv6ループバックアドレス(:: 1)にバインドされています。私は、デュアルスタックIPv4/IPv6システムを正しくサポートしていないJavaに関するいくつかの問題を思い出しています。これはおそらくそのような場合です。 127.0.0.1のみ(IPv4)に接続しています。

他に試したことがあるもの(curl、telnet ...)は、まずIPv6アドレスを試してから、失敗した場合はIPv4アドレスに戻ります。そういうわけで、Javaアプリケーションは動作しません。

stunnelに127.0.0.1を強制的にバインドしてください。また、Javaがhttp://[::1]:8045/malibu/GetProvidersに接続しようとしているかもしれませんが、HTTP URLでIPv6アドレスをサポートしているかどうかはわかりません。

+1

はい!これはうまくいきました!stunnel.confの "accept"行を127.0.0.1:8045に変更し、URLを "http: //127.0.0.1:8045/malibu/ "となり、すべてうまくいくようです。 – Rogach

+4

どのようにコードを変更して動作させるのですか? –

1

Windows上にApacheがあり、Javaからの接続も拒否されています。しかし、接続とApacheログをデバッグすると、実際にはで接続に問題がないことがわかります。 Apacheはエラー301を返し、永久に移動しました。それから、存在しないポート8080にリダイレクトURLを提供します。サーバー設定に何か問題があります。おそらく、ServerNameディレクティブは間違ったポートを使用します。 要求されたURLに末尾のスラッシュを追加すると、問題が修正されます。私の場合、最も有用なデバッグ出力はwgetによって与えられました。

the accepted answerはこの現象を説明していない可能性があります。記者自身は、最終的に彼は最後にスラッシュでURLを使用したというコメントで認めた。

関連する問題