Java端口转发

时间:2012-07-20 04:06:06

标签: java sockets portforwarding

我正在尝试设计一个非常简单的远程端口转发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();
        }    
    }
}

我的下一步应该是什么?

3 个答案:

答案 0 :(得分:1)

您正在编写HTTP代理。您不需要,已经有许多免费提供,例如Apache Squid。但是,如果必须继续,当您接受套接字时,需要启动一个线程来处理它。该线程的第一件事是从套接字读取HTTP CONNECT命令并获取目标IP地址。然后它应该打开一个到该地址的套接字,并在必要时向接受的套接字发送失败回复,否则它需要再启动两个线程然后退出自己。这两个线程都做同样的事情:从套接字读取并写入另一个套接字。其中一个从接受的套接字读取并写入目标套接字;另一方则反过来。

答案 1 :(得分:0)

  

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

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

答案 2 :(得分:0)

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

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