2017-06-05 105 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謝謝提醒,是的,你是對的,一個**沒有**錯過了,我更新了我的答案。 –