【问题标题】:Java port forwardingJava 端口转发
【发布时间】:2012-07-19 08:10:12
【问题描述】:

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

我的下一步应该是什么?

【问题讨论】:

    标签: java sockets portforwarding


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 2012-06-25
        • 2013-12-08
        相关资源
        最近更新 更多