我有一個在JVM/Tomcat上運行的應用程序,它運行的機器都啓用了IPv6堆棧。我試圖向另一臺僅支持IPv4的機器發出請求,JVM將始終偏好IPv6堆棧發出此請求(我使用Apache HttpClient
類來發出請求)。如何讓JVM在隔離範圍內使用IPv4堆棧?
我知道-Djava.net.preferIPv4Stack=true
屬性,但由於我不會在這裏介紹的原因,當JVM啓動時我無法傳遞它。我甚至無法將其編程(的時間,短週期),像這樣:
System.setProperty("java.net.preferIPv4Stack", "true");
...因爲這會潛在地影響對JVM/Tomcat實例運行其他的線程(因爲我從this question理解並其他)。
所以問題是,我該如何讓這個單一請求通過IPv4堆棧(意味着實際使用IPv4接口,而不僅僅是連接到IPv4端點)?
我想過使用cURL(通過exec或通過libcurl綁定),因爲curl完全不使用JVM。
還有其他想法嗎?
會通過代理進行選擇嗎?我通常使用SOCKS代理。 –
事情是,我試圖連接到的機器實際上是一個代理,但它只適用於IPv4(舊代理)。設置另一個代理是不可能的。再次,我很抱歉這些荒謬的限制,但這是我必須與之合作。 –
只有用於測試的網絡訪問的額外程序不正常?代理選擇器是否只是這個請求的一個選項? http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html –