尝试使用Apache TelnetClient通过端口转发代理建立TLS telnet会话

问题描述

我正在尝试编写一个Java程序,该程序将与启用TLS的服务器建立Telnet会话,该服务器只能通过端口转发代理进行访问。

过去,我已经成功地使用TelnetClient与非TLS服务器和TLS服务器建立telnet会话,但是我从未使用代理。

我已经为此苦苦挣扎了一段时间了,所以该问专家了。

这是一个简单的代码示例,它说明了我遇到的问题。在向读者讲话后,我什么也得不到,然后读者封锁:

'''''公共类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();
        }
     }

} '''

我在做什么错了?

TIA约翰

解决方法

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