1

我正在尝试设计一个非常简单的远程端口转发 Java 程序。当这个程序完成并且我在终端 ( java PortForward 1234 google.com 80) 中运行它时,程序应该监听 1234 上的连接并将流量转发到远程主机 google.com 上的 80。然后我应该能够将我localhost:1234的浏览器指向并且浏览器应该会显示谷歌的页面。

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 地址。然后,它应该打开一个指向该地址的套接字,并在必要时向接受的套接字发送失败回复,否则它需要再启动两个线程,然后自行退出。这两个线程都做同样的事情:从一个套接字读取并写入另一个套接字。其中一个从接受的套接字读取并写入目标套接字;另一个则相反。

于 2012-07-20T10:00:33.870 回答
0

很抱歉发布一个旧问题。但由于尚未得到答复,因此我无耻地向您推荐我的博客文章。您将找到完全符合您要求的源代码(或二进制 jar 文件)。

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

于 2013-07-07T00:38:04.140 回答
0

我一直在拼命地搜索和搜索,搜索和搜索关于下一步做什么的任何可能的提示,但我找不到任何有用的东西。请帮忙。我的下一步应该是什么?

您的下一步是打开一个到hostName和端口的套接字hostportNum。然后,您可能想要创建一些阅读inFromHostoutToHost/流。然后,您可能想要创建一个线程来从浏览器读取并写入主机,以及另一个线程从主机读取并写入浏览器。

于 2012-07-20T04:11:52.557 回答