2017-06-05 106 views
0

我试图通过SOCKS代理连接到oracle数据库,因为我没有直接访问oracle服务器。 所以,我打开我的4000端口的代理,并添加这些选项到我的应用程序:Java socks代理使用本地DNS

-DsocksProxyHost=localhost -DsocksProxyPort=4000 

现在,如果我在连接字符串中使用Oracle服务器的主机名启动我的应用程序,然后我得到指定的“未知主机”。 如果我使用IP地址而不是主机名,则连接成功。 我猜java正在尝试使用我的本地DNS而不是远程DNS来解析主机名。我如何使用远程DNS?

+0

它是什么客户? SOCKS的一个结构问题(例如,如果它位于客户端下方的库中),通常客户端在建立连接之前先解析DNS,而使用SOCKS时,解析和连接是在同一请求中一起完成的。各种auto-SOCKS客户端通过钩住DNS查找并返回伪造地址(当它们在SOCKS中看到连接请求时用来识别原始目的地名称)来解决这个问题。 – Adrien

回答

1

这是JVM的一个bug,似乎没有立即的计划来解决它。

SOCKS是真的老了。没有广泛部署在现代化的基础设施。降低P4的优先级。

是它使用的是哪个SOCKS版本
+0

你的意思是有*无*计划修复它 – jaudo

+0

@ jaudo谢谢提醒,是的,你是对的,一个**没有**错过了,我更新了我的答案。 –