通过 ssh 隧道的 http 请求

Posted

技术标签:

【中文标题】通过 ssh 隧道的 http 请求【英文标题】:http request over ssh tunnel 【发布时间】:2014-08-19 11:43:47 【问题描述】:

我有两台服务器。我使用第一个服务器安装的 Tor 应用程序来隐藏我的 IP 地址。以后将被命名为 SSH Tunnel Server。第二台服务器是在 ssh 隧道上发送 http 请求。它将被命名为客户端服务器。 出于上述目的,我编写了下面的代码。但我无法读取 SSH 隧道服务器响应。我在哪里做错了?

            String user = "root";
            String password = "password";
            String host = "198.199."11.111";
            int port=22;

            JSch jsch = new JSch();
            Session session = jsch.getSession(user, host, port);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");



            session.connect();

            Channel channel=session.openChannel("direct-tcpip");
            ((ChannelDirectTCPIP)channel).setHost("whatismyipaddress.com");
            ((ChannelDirectTCPIP)channel).setPort(80);

            String cmd = "GET / HTTP/1.1" ;

            InputStream in = channel.getInputStream();
            OutputStream out = channel.getOutputStream();
            channel.setInputStream(System.in);
            channel.setOutputStream(System.out);
            channel.connect(10000);

            byte[] bytes = cmd.getBytes();          
            InputStream is = new ByteArrayInputStream(cmd.getBytes("UTF-8"));

            int numRead;

            while ( (numRead = is.read(bytes) ) >= 0) 

                  out.write(bytes, 0, numRead);
                  System.out.println(numRead);
            

            out.flush();

            try 
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                for (String line; (line = reader.readLine()) != null;)
                    System.out.println(line);
                
             catch (java.io.IOException exc) 
                System.out.println(exc.toString());
            
            channel.disconnect();
            session.disconnect();
            System.out.println();

【问题讨论】:

【参考方案1】:

您没有在 GET 命令之后输出任何行终止符。尝试将 GET 字符串更改为:

String cmd = "GET / HTTP/1.1\r\n\r\n";

【讨论】:

以上是关于通过 ssh 隧道的 http 请求的主要内容,如果未能解决你的问题,请参考以下文章

通过 php 中的 ssh 连接隧道请求

通过 DataGrip 上的 ssh 隧道更快地连接

使用动态端口分配的反向 SSH 隧道

Spring boot Resttemplate通过ssh隧道的动态代理设置连接不识别远程DNS

SSH隧道及其使用

[视频教程]利用SSH隧道进行远程腾讯云服务器项目xdebug调试