2014-01-21 5 views
0

나는 TCPSocket (비 HTTP) 기반의 루비 서버를 가지고있다.Ruby TCPSocket Server - 클라이언트가 어떤 호스트에 연결했는지 알 수 있습니까?

나는 두 개의 도메인을 가지고 있는데, 둘 다 내 서버 IP 주소 (동일한 주소)에 A 레코드를 지정합니다. 따라서 해당 도메인 중 하나에 연결하는 클라이언트가 있습니다. 클라이언트가 어떤 도메인에 연결했는지 알 수 있습니까?

다른 프로토콜에서도 가능하다는 것을 알았지 만 수동으로 추가 된 헤더를 기반으로하는지 또는 기본 TCP/IP 연결에서 실제로 추출되었는지는 잘 모르겠습니다. 예 : PHP에는 클라이언트가 연결하고있는 도메인을 보여주는 $_SERVER["HTTP_HOST"]이 있습니다.

답변

1

TCP 소켓 수준에서 알려진 유일한 것은 연결의 원본 및 대상 IP 주소 (및 포트)입니다. IP 주소가 DNS를 통해 어떻게 해결되었는지는이 계층에서 알 수 없습니다. HTTP가 TCP의 최상위에서 작동하더라도 HTTP 서버는 요청한 도메인을 알기 위해 클라이언트의 HTTP 헤더를 조사해야합니다. 이것이 HTTP_HOST 값이 채워지는 방법입니다.

가능한 추가 솔루션은 서버가 추가 IP 주소를 갖도록 구성하는 것입니다. 추가 IP 주소를 NIC에 할당하거나 추가 NIC를 추가하여이 작업을 수행 할 수 있습니다. 그런 다음 각 도메인에서 다른 IP 주소를 사용하게하십시오. 그렇지 않으면 이것이 가능하지 않으며이 정보를 전달하기 위해 TCP 위에 응용 프로그램 프로토콜을 고려할 수 있습니다.

관련 문제