问题描述
我正在尝试编写一个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代码并注释掉了这一行。当我这样做时,我的代码就可以正常工作。