2012-05-29 4 views
1

나는 양방향 SSL 클라이언트와 서버를 java로 작성했습니다. 문제는 서버가 클라이언트의 호스트 이름을 찾을 수 있어야하고 해당 클라이언트가 NAT 게이트웨이 또는 프록시 뒤에 있다는 것입니다. 나는 시도했다 :. clientSocket.getRemoteSocketAddress(), clientSocket.getInetAddress을()에는 getCanonicalHostName(), clientSocket.getInetAddress() getHostAddress(),자바를 사용하여 NAT 게이트웨이 또는 프록시 뒤에있는 SSL 클라이언트의 호스트 이름 얻기

clientSocket이 유형의 SSLSocket이며 그들 중 누구도 작동하지 않습니다 이에

, 그들은. 그냥 나에게 공용 IP 주소를 알려줘. 서버에 연결되어있는 클라이언트의 실제 호스트 이름을 얻을 수있는 방법이 있습니까?

+0

응용 프로그램 계층 프로토콜의 소유권이있는 경우 원형 교차 솔루션이 있습니다. 엔드 포인트 주소는 서버와 클라이언트 사이의 응용 프로그램 계층 핸드 셰이크의 일부로 정보 헤더로 전송 될 수 있습니다. 이것은 분명히 당신이 서버/클라이언트의 개발자가되는 것에 달려 있습니다. 이 개념의 좋은 예는 HTTP입니다. 요청 헤더는'X-Forwarded-For'입니다. 이것은 최종 클라이언트 ('X-Forwarded-For : client1, proxy1, proxy2 '형식의 데이터 기타.). – Samveen

답변

1

소켓에서 발생하지 않습니다. 원격 호스트가 NAT 방화벽 뒤에 있으면 정의에 따라 호스트 이름과 IP 주소가 보이지 않습니다. 볼 수있는 것은 공개 IP와 호스트 이름뿐입니다.

그러나 원격 측에서 hostname 명령을 실행하고 출력을 SSh 연결을 통해 다시 파이프 할 수 있습니다. 다시 얻은 데이터는 원격 호스트의 구성만큼 좋을 것입니다. 다시 얻은 것이 내부 DNS 호스트 이름 또는 다른 것과 일치한다는 보장은 없습니다.