2013-05-21 6 views
1

JVM/Tomcat에서 실행되는 응용 프로그램이 있고 실행되는 시스템에서 IPv6 스택을 사용할 수 있습니다. 나는 IPv4만을 지원하는 다른 머신에 요청을하려고하는데, JVM은 항상이 요청을하기 위해 IPv6 스택을 선호 할 것이다. (요청을하기 위해 아파치 HttpClient 클래스를 사용하고있다.) JVM이 시작할 때 나는 -Djava.net.preferIPv4Stack=true 부동산에 관한하지만 내가 여기에 가지 않을 이유 알고어떻게 격리 된 범위에서 JVM에서 IPv4 스택을 사용하게합니까?

, 나는 그것을 전달할 수 없습니다. 나는 심지어처럼 (짧은 시간 동안) 프로그래밍 방식으로 설정할 수 없습니다

System.setProperty("java.net.preferIPv4Stack", "true"); 

을 ...이 잠재적으로 JVM/톰캣 인스턴스에서 실행중인 다른 스레드에 영향을 줄 수 있기 때문에 (나는 this question에서 이해되는 및 기타). 나는이 하나의 요청이 IPv4의 스택을 통해 갈 수 있도록 어떻게

그래서 문제는, (실제로는 IPv4 인터페이스뿐만 아니라는 IPv4 엔드 포인트에 연결을 사용하는 의미)입니까?

나는 전혀 JVM을 사용하지 않는 컬 이후 (간부를 통해 또는 바인딩 libcurl를 통해) 컬을 사용하는 방법에 대한 생각했다.

다른 아이디어?

+0

프록시를 통해 옵션을 사용할 수 있습니까? 나는 일반적으로 SOCKS 프록시를 사용한다. –

+0

것은 내가 연결하려고하는 컴퓨터가 실제로 프록시라는 것입니다. 그러나 IPv4 (이전 프록시)에서만 작동합니다. 다른 프록시 설정은 문제가되지 않습니다. 다시 말하지만, 이러한 말도 안되는 제한에 대해 유감스럽게 생각하지만, 내가해야 할 일이 있습니다. –

+0

테스트 용 네트워크 액세스 권한이있는 추가 프로그램이 좋지 않습니까? 프록시 선택기가이 요청에 대한 옵션일까요? http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html –

답변

1

Flexo의 언급이 유효합니다!

궁극적으로 실제 문제는 JVM이 요청을 IPv6 인터페이스로 만들지 않는다는 것을 깨달았습니다. 프록시가 A DNS 항목 만 가질 수 있기 때문에 불가능했습니다 (Flexo가 지적한대로).

진짜 문제는 JVM이 프록시 호스트를 해결하는 데 실패했다 프록시 URL에 오타했다; 저를 버렸던 사실은 Inet6Address 클래스에서 예외가 발생했기 때문입니다 (아마도 JVM이 프록시가 IPv4 전용이라는 사실을 아직 알지 못했기 때문일 수 있습니다).

내가 오타를 고정! 이제 프록시가 제대로 해결되고 요청은 IPv4를 통해 이루어집니다. 고맙습니다!