3

ローカルホスト(Javaアプリケーションでもある)で実行されているプロキシサーバーを介して、Jarが外部IPに対して行う接続試行を強制する方法を見つけようとしています。プロキシ サーバーが接続を受信すると、外部 IP との接続を開き、クライアント/サーバーとの間で IO のルーティングを開始します。

これを 2 日間グーグル検索しましたが、うまくいきませんでした。検索で間違った用語を使用していると思われます。

何かアイデアがあれば教えてください、何でもやってみます。

前もって感謝します。- ショーン。

4

3 に答える 3

5

それが「実際の」プロキシである場合は、Javaシステムプロパティを使用して使用するプロキシを指定できます。

2つの選択肢があります。

  1. コマンドラインでプロキシを指定します
  2. アプリにハードコードする

さてあなたは実際に3つ持っています

  1. .propertiesファイルを指定し、そこから読み取り、システムプロパティとして設定します(これはほとんどオプション2ですが、より動的です)

コマンドラインから使用します:

 java -Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -jar YourJar.jar

localhostこれにより、実行するすべてのhttp接続はポートで通過します8080

2つ目は、プログラムのメインメソッドにこれを追加することです。

public static void main( String [] args ) { 
    System.setProperty("http.proxyHost", "localhost");
    System.setProperty("http.proxyPort", "8080");
    .....
}

これは同じことをします。

最後にからロードmyapp.properties

public static void main( String [] args ) { 
    try { // there are cleaner ways of course 
        ResorceBundle bundle = ResourceBundle.getBundle("myapp");
        System.setProperty("http.proxyHost", bundle.getString("proxy.server"));
        System.setProperty("http.proxyPort", bundle.getString("proxy.port"));
    } catch( MissingResourceException missingResourceException ){}
    ....
}

myapp.propertiesクラスパスから利用できることを確認する必要があります

この機能の詳細については、こちらをご覧ください

于 2009-10-17T03:43:27.987 に答える
1

ソケット接続の一般的な(HTTP / FTP固有ではありません!)プロキシについて質問している場合、簡単な答えは、Javaではサポートされていないということです。

HTTPおよびFTPトラフィックのプロキシを構成すると、プロキシはアプリケーションプロトコルレベルで実行されます。Java側のプロキシプロパティは、アプリケーションが接続しようとしているURLのIPアドレスではなく、指定されたプロキシに接続するようにURLConnectionレイヤーに指示します。Javaソケットレベルは、これが発生していることを認識していません。プロキシに接続するためのリクエストが表示されるだけです。

これは、HTTPおよびFTPプロトコルが特にプロキシをサポートしているために機能します。たとえば、HTTP GETリクエストメッセージの最初の「行」は、クライアントがリクエストしているページの完全なURLを示します。GET要求がプロキシに送信される場合、プロキシはそれをどこに送信する必要があるかを判断できます。

ソケットレベルでのプロキシの問題を見ると、最初の観察は、標準のJavaクラスライブラリがこれをサポートしていないことです。2番目の観察結果は、これを代替トランスポート層として実装しない限り、実際には実装できないということです。その理由は、IPおよびTCP / IPは、メッセージ/ストリームを明示的にプロキシまたはリレーするという概念を単にサポートしていないためです。また、そのようなトランスポートを実装したとしても、標準のSocketモデルには適合しません。

したがって、 Javaアプリケーションのすべてのネットワークトラフィックをプロキシすることについて本当に質問している場合、これはJVMの外部でのみ実装できます。つまり、JVMの(物理または仮想)ホストオペレーティングシステムのネットワークトランスポートレベルで。

于 2009-10-17T04:51:24.283 に答える
0

HTTP トラフィックまたは FTP トラフィックの場合は、次のシステム プロパティを試すことができます。

http.proxyHost (デフォルト: ) http.proxyPort (デフォルト: http.proxyHost が指定されている場合は 80) http.nonProxyHosts (デフォルト:

詳細については、次のリンクを参照してください。

http://java.sun.com/docs/books/tutorial/networking/urls/_setProxy.html

于 2009-10-17T03:04:23.870 に答える