2017-05-10 1 views
1

Ruby on Rails에서 클라이언트의 IP 주소는 어떻게 얻을 수 있습니까? 사용자가 특정 페이지를 방문하면 Rails는 IP 주소를 가져 와서 화면에 표시합니다.레일에서 클라이언트 IP 주소 가져 오기 및보기 출력

request.remote_ip 

을하지만 내 지식의 IPv6이다 ::1을 반환 : 내 컨트롤러에서

나는 시도했습니다. 나는 클라이언트의 IPv4 주소를 얻고 싶다. 이것을 어떻게 할 수 있습니까? 내 페이지를 방문하는 데 사용하는 첫 번째 장치의 IP 주소 만 확인하기 때문에 클라이언트 당 한 번만 수행하면됩니다.

+0

IPv6는 갈 방법입니다 - 왜 이것을 변경 하시겠습니까? 그물이 IPv4에서 IPv6로 이동하는 좋은 이유가 있습니다 ... 또한,'remote_ip'는 가장 좋은 추측 시나리오입니다. 실제 통신에서는 애플리케이션이 프록시 레이어 (예 : nginx 등) 뒤에 있고 HTTP 헤더에 따라 원격 IP 주소가 추측됩니다. – Myst

+0

내 환경에서 @Myst, IPv6는 사용되지 않으며 VPN에 연결되어있는 동안 사용자와의 연결에 문제가 발생할 수 있습니다. – Bmoe

+0

그것은 IPv4 지원이 문제를 해결할 수있는 것처럼 들리지만 ... 집에서 연결하는 사람들은 ISP에서 IPv6을 사용하고있을 것입니다. 오늘이 아니라면, 곧. 로깅 이외의 다른 용도로 IPv4를 사용하면 VPN 액세스를 확인하는 데 사용되는 경우 특히 HTTP 헤더 위조와 관련된 보안 문제가 발생할 수 있습니다. – Myst

답변

1

::1으로 충분하지 않습니까? 그것은 로컬 호스트입니다. 레이어 3 전송이 필요한 곳으로 사이트를 게시하는 경우 적절한 IPv4 또는 IPv6 주소를 각각 렌더링해야합니다.

즉, 로컬 IPv6 스택을 사용하지 않으면 127.0.0.1이 렌더링됩니다.

+0

그리고 IPv6는 어떻게 비활성화 할 수 있습니까? 모든 네트워크 어댑터의 네트워크 어댑터 속성 상자를 이미 선택 취소했습니다. – Bmoe

+0

Windows와 관련이 있습니다 (http://www.techunboxed.com/2012/08/how-to-disable-ipv6-in-windows-8).htaccess Admin Home English Language Content – dps

+0

또한, 당신은 정말로 그것을 해제하지 말았어야, 127.0.0.1 볼 수있는 일이 많이 일종의 일을해야합니다 (즉, 어딘가에 로컬 호스트 이외의 응용 프로그램을 배포) 일을해야한다고 설명합니다. – dps

1

당신은 로컬 프록시 IP 주소 (로컬 호스트 주소) 있는지 여부에 관계없이 IP를 반환하거나

  1. request.ip를 사용할 수 있습니다.
  2. request.remote_ip은 더 똑똑하고 로컬 프록시 외부에있는 클라이언트 의 IP 주소를 가져옵니다.이 값은 사용 가능한 모든 IP 주소 정보를 해석하는 데 가장 좋으며 최상의 추측을합니다.

(request.remote_ip) 발신 IP 주소를 결정합니다. REMOTE_ADDR은 표준이지만 사용자가 프록시를 사용하지 않는 경우 이 실패합니다. 프록시에 의해 HTTP_CLIENT_IP 및/또는 HTTP_X_FORWARDED_FOR가 설정되므로 REMOTE_ADDR이 프록시 인 경우이를 확인하십시오. 다중 연결 프록시의 경우 HTTP_X_FORWARDED_FOR은 쉼표로 구분 된 목록 일 수 있습니다. 이 신뢰할 수없는 마지막 주소가 원래의 IP입니다.

관련 문제