2012-04-15 4 views
0

Google AppEngine에 배포 된 서블릿을 사용하여 클라이언트의 원격 포트 번호로 응답합니다. HttpServletRequest.getRemoteAddr()는 정상적으로 작동하지만 getRemotePort()는 0을 반환합니까?Java Servlet이 원격 포트 0을 반환합니까?

포트 0은 유효하지 않습니다. 정상적인 포트 번호 (예 : 55046 또는 기타)를 말한 다른 IP 서비스를 시도했지만 브라우저 또는 Java 코드에서 액세스 할 때마다 내 서블릿은 0을 반환합니다.

내 최종 목표는 수신자의 주소와 외부 포트 위치를 조회 할 때 연결 개시 자에게 알릴 수 있으므로 TCP 구멍 펀칭 기술이 제대로 작동합니다.

왜 그럴까요? 가능한 경우 실제 포트 번호를 얻으려면 어떻게합니까? NAT 라우터가 프록시 포트를 사용하지 않습니까?

+1

[버그] (http://googleproof.org/gsubdomainiscode/p/googleappengine/issues/detail?id=4210) – tenorsax

+0

글쎄 그건 짜증나. 감사. – bgroenks

답변

0

getRemotePort가 0을 반환하는 이유는 모르겠지만 최종 목표는 클라이언트 포트가 쓸모 없다는 것을 잘 알고 있습니다. 클라이언트 포트는 모든 연결마다 다시 할당됩니다. 실제로 첫 번째 연결에서 55046을 사용하는 경우 클라이언트 포트의 전체 지점은 새 연결에서 사용되지 않는 다른 클라이언트 포트 번호를 사용하는 것입니다.

이렇게하면 방화벽 정책에서 구멍을 구성하는 데 쓸모없는 정보가됩니다. 클라이언트 포트는 필요 없습니다. 필요한 것은 서버 주소, 서버 주소 및 클라이언트 주소 (선택적으로 해당 클라이언트 주소의 액세스 만 허용하려는 경우)입니다.

+0

호스트에서 클라이언트 주소에 대한 연결을 시작 (실패) 한 다음 클라이언트가 호스트에 연결을 시작하게하여 "구멍을 뚫지 않습니까?" 어쩌면 그게 UDP에 대해서만 작동합니다 ... – bgroenks

+0

구멍으로, 나는 방화벽 정책에 구멍을 생각하고있어. 네가 무슨 말하는지 모르겠다. 나는 호스트가 클라이언트와의 연결을 시작하는 프로토콜을 모른다. 그러면 호스트가 클라이언트가되고 클라이언트는 서버가됩니다. 그래서 당신이 고객을 말할 때 당신이 무엇을 의미하는지 확신 할 수 없으며 당신이 말하는 것에 대해 모른다. –

+0

NAT 탐색. P2P 클라이언트 ----> 서버 <----- 호스트 | 클라이언트 <----- 서버 -----> 호스트 | 고객 호스트 – bgroenks

관련 문제