ssl - 尝试使用 Apache TelnetClient 通过端口转发代理建立 TLS 远程登录 session

标签 ssl proxy client telnet

我正在尝试编写一个 Java 程序,它将与启用 TLS 的服务器建立 Telnet session ,该服务器只能通过端口转发代理访问。
在过去,我已经成功地使用 TelnetClient 与非 TLS 服务器和 TLS 服务器建立 telnet session ,但我从来没有使用过代理。
我已经为此苦苦挣扎了一段时间,所以是时候请教专家了。
这是一个简单的代码示例,说明了我遇到的问题。在我向读者发表讲话后,我没有得到任何返回,然后读者阻止:
'''公共(public)类 SimpleTest {

public static PrintStream  psout;


static void write(String value) {
    try {
        psout.println(value);
        psout.flush();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

 public static void main(String[] args) {

     TelnetClient telnet;
     TelnetReader tr;

     String host="192.168.82.72";   
     int    port=992;
     
     try {
            // 1. Create the TelnetClient Object 
            telnet = new TelnetClient();
            
            // 2. Set up our own SocketFactory (For SSL)
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            telnet.setSocketFactory(sslsocketfactory);
            
            // 3. Set the proxy
            System.setProperty("socksProxyHost","127.0.0.1");
            System.setProperty("socksProxyPort","6600");
            
            Proxy socksProxy  = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", 6600));
            telnet.setProxy(socksProxy);
            
            
            // 4. Connect
            telnet.connect(host, port);
            Thread.sleep(1000);
            
            // 5. Start the reader
            tr = new TelnetReader(telnet.getInputStream());
            Thread reader = new Thread (tr);
            reader.start();
            Thread.sleep(1000);
            
            // 6. Address the output stream
            String r;
            psout = new PrintStream(telnet.getOutputStream());
            Thread.sleep(1000);
            r = tr.get();          // <- r is null!!
            
        } catch (Exception e) {
            e.printStackTrace();
        }
     }
}
'''
我究竟做错了什么?
蒂亚约翰

最佳答案

这就是我解决问题的方法。我发现 setProxy 方法(在 Apache 代码中)重置了 SocketFactory。我下载了 Apache 代码并注释掉了那一行。当我这样做时,我的代码工作得很好。

关于ssl - 尝试使用 Apache TelnetClient 通过端口转发代理建立 TLS 远程登录 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63821027/

相关文章:

ssl - 我如何知道在 SSL 上下文中加载的 CA 主题名称列表

ssl - 为什么一个 curl 可以做 https 而另一个不能

apache - Apache(也许是 Tomcat)如何重定向到特定文件

node.js - NPM Frontend Proxy 已设置,但无法下载 NPM 包

c# - 用反射拦截方法

c# - 服务器模式 SSL 必须使用具有关联私钥的证书 - 在 TLS 握手期间

c++ - 使用 qt 进行 SSL 握手时出错

java - Rmi 客户端连接检查并重试连接?

java - TCP 客户端不适用于 Android

java - 为跨平台移动客户端编写 MMO 服务器