1

非常に単純なリモート ポート転送 Java プログラムを設計しようとしています。このプログラムが完了し、これをターミナル ( java PortForward 1234 google.com 80) で実行すると、プログラムは 1234 で接続をリッスンし、トラフィックをリモート ホスト google.com の 80 に転送します。その後、ブラウザをポイントできるようにlocalhost:1234なり、ブラウザはGoogleのページを表示するはずです。

import java.io.*;
import java.net.*;

public class PortForward{
    public static void main(String argv[]) throws Exception{

        int portNum = Integer.parseInt(argv[0]);
        String hostName = argv[1];
        int hostportNum = Integer.parseInt(argv[2]);

        ServerSocket welcomeSocket = new ServerSocket(locportNum);  

        while(true){
            Socket conSocket = welcomeSocket.accept();

            BufferedReader inFromBrowser = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

            DataOutputStream outToBrowser = new DataOutputStream(connectionSocket.getOutputStream());

            conSocket.close();
        }    
    }
}

私の次のステップは何ですか?

4

3 に答える 3

1

HTTP プロキシを作成しています。必要はありません。Apache Squid など、すでに多くのものが無料で利用できます。ただし、続行する必要がある場合は、ソケットを受け入れるときに、それを処理するためにスレッドを開始する必要があります。スレッドが最初に行うことは、ソケットから HTTP CONNECT コマンドを読み取り、ターゲット IP アドレスを取得することです。次に、そのアドレスへのソケットを開き、必要に応じて受け入れたソケットに失敗応答を送信する必要があります。そうでない場合は、さらに 2 つのスレッドを開始してから終了する必要があります。2 つのスレッドはどちらも同じことを行います。つまり、ソケットから読み取り、別のソケットに書き込みます。そのうちの 1 つは、受け入れられたソケットから読み取り、ターゲット ソケットに書き込みます。もう一方はその逆です。

于 2012-07-20T10:00:33.870 に答える
0

次に何をすべきかについての可能なヒントを必死に検索し、検索し、検索し続けてきましたが、役立つものは何も見つかりません。助けてください。私の次のステップは何ですか?

次のステップは、hostNameおよびポートへのソケットを開くことですhostportNum。次に、おそらくいくつかinFromHostoutToHostリーダー/ストリームを作成する必要があります。次に、ブラウザから読み取ってホストに書き込むスレッドと、ホストから読み取ってブラウザに書き込む別のスレッドを作成することをお勧めします。

于 2012-07-20T04:11:52.557 に答える
0

古い質問に投稿して申し訳ありません。しかし、まだ回答が得られていないため、恥知らずに私のブログ記事を紹介します。あなたがやろうとしていることを正確に実行するソース コード (またはバイナリ jar ファイル) が見つかります。

http://kennethxu.blogspot.com/2006/04/java-based-tcpip-port-forwarding.html

于 2013-07-07T00:38:04.140 に答える