복붙노트

[RUBY-ON-RAILS] 지역 레일 개발 환경에서 실제 IP 주소를 가져옵니다

RUBY-ON-RAILS

지역 레일 개발 환경에서 실제 IP 주소를 가져옵니다

나는 레일 2.3.8, 루비 1.8.7이, 잡종 웹 서버와 MySQL 데이터베이스.

내가 개발 모드에서, 그리고 난 실제 IP 주소를 찾을 필요

내가 사용하는 경우 내가 127.0.0.1로 IP를 얻고있다 request.remote_ip

나는 로컬 컴퓨터에서 개발하고 있기 때문에 내가 127.0.0.1을 얻고 알고 ..하지만 난 로컬 컴퓨터에어도 실제 IP 주소를 얻을 수있는 방법이 있나요?

나는이 내 컨트롤러 아래에 언급 된 모든 I get 및 뷰에서 그들 모두와 127.0.0.1이다 사용하고 있습니다.

request.remote_ip
request.env["HTTP_X_FORWARDED_FOR"]
request.remote_addr
request.env['REMOTE_ADDR']

해결법

  1. ==============================

    1.최대한 멀리 볼 수 로컬 컴퓨터의 원격 주소를 얻기위한 표준 방법이 없습니다. 당신이 당신의 지오 코딩 (테스트)에 대한 원격 주소가 필요한 경우, 나는 위치와 IP 주소와 일치하는 데이터베이스 테이블에 127.0.0.1을 추가하는 것이 좋습니다.

    최대한 멀리 볼 수 로컬 컴퓨터의 원격 주소를 얻기위한 표준 방법이 없습니다. 당신이 당신의 지오 코딩 (테스트)에 대한 원격 주소가 필요한 경우, 나는 위치와 IP 주소와 일치하는 데이터베이스 테이블에 127.0.0.1을 추가하는 것이 좋습니다.

    마지막 수단으로 당신은 당신의 원격 주소도 하드 코딩 할 수 있었다. 예를 들면 이 같은 :

    class ApplicationController < ActionController::Base
      def remote_ip
        if request.remote_ip == '127.0.0.1'
          # Hard coded remote address
          '123.45.67.89'
        else
          request.remote_ip
        end
      end
    end
    
    class MyController < ApplicationController
      def index
        @client_ip = remote_ip()
      end
    end
    
  2. ==============================

    2.난 당신이 TCP / IP에서이 실제로 거짓말에 대한 귀하의 로컬 호스트에 '진짜-IP'와 이유를 얻을 것이다 생각하지 않습니다.

    난 당신이 TCP / IP에서이 실제로 거짓말에 대한 귀하의 로컬 호스트에 '진짜-IP'와 이유를 얻을 것이다 생각하지 않습니다.

    원격 IP 주소는 요청에 전송되는 네트워크에 따라 달라집니다. 이 통신 할 때 IP 주소를 전송하는 TCP / IP의 일부이기 때문에 항상 대상 컴퓨터가 이해할 수 상대 IP 주소로 변환합니다. 요청이 서브넷 내에있는 경우, 해당 지역의 IP입니다. 그것은 당신의 서비스 공급자를 통해 네트워크로 들어가는 순간, 그것은 다시 서비스 공급자 (:이 논증하고 네트워크 설정에 따라 달라집니다 주)을 추적 할 수있는 글로벌 IP를 가정합니다.

    로컬에서 테스트하는 경우에 당신이 경험 그래서 그것은 127.0.0.1이 될 것입니다. 로컬 네트워크를 통해를 전송하는 경우, 그 네트워크 내에서 사용자의 IP 수 있습니다. 예를 들어, 내 사무실 네트워크에서 내 컴퓨터의 IP는 192.168.1.7이고, 나는 동일한 네트워크에있는 다른 컴퓨터를 통해 3000 포트에서 내 응용 프로그램에 액세스하는 경우, 그때는 192.168.1.13로 request.remote_ip를 얻을 192.168.1.13에서 말

    이것이 의미하는 것은 당신이 로컬 호스트에있는 동안, 127.0.0.1는 당신의 진짜 IP입니다이다. 그리고 마찬가지로 내가 언급 한 예에서, 192.168.1.13는 요청을 보낸 컴퓨터의 실제 IP입니다.

  3. ==============================

    3.이것은 내가 일반적으로 요즘 할 것입니다 :

    이것은 내가 일반적으로 요즘 할 것입니다 :

    if Rails.env.production?
      request.remote_ip
    else
      Net::HTTP.get(URI.parse('http://checkip.amazonaws.com/')).squish
    end
    
  4. ==============================

    4.당신이 URL을 액세스하는 방법에 따라 달라집니다.

    당신이 URL을 액세스하는 방법에 따라 달라집니다.

    당신은 HTTP를 사용하여 URL에 액세스하는 경우 : //127.0.0.1 / ... 또는 http : // localhost를 / ..., 원격 IP로 127.0.0.1을 얻을 것이다. 당신은 LAN에있는 경우, HTTP를 사용 : // {LAN-IP} / ...

    에 대한 예를 들어, HTTP : //172.20.25.210 / .......

  5. ==============================

    5.나는이 작업을 수행했다 :

    나는이 작업을 수행했다 :

    require 'socket'
    Socket.ip_address_list.detect(&:ipv4_private?)&.ip_address
    
  6. ==============================

    6.나는 RSpec에와 테스트하고 내가 한 일은이었다입니다 :

    나는 RSpec에와 테스트하고 내가 한 일은이었다입니다 :

    request.stub(:remote_ip).and_return('198.172.43.34')
    Instance.stub(:find_by_key).and_return(@instance)
    before = @instance.weekly_statistic.times_opened_by['198.172.43.34']
    
    get :key, :key=>"314C00"
    
    @instance.weekly_statistic.times_opened_by['198.172.43.34'].should == before+1
    

    그리고 그것은 마법처럼 일했다! :)

  7. ==============================

    7.당신이 당신의 진짜 IP를 개발 시스템에 액세스하는 경우에 당신은, 당신의 진짜 IP를 받아야하므로 localhost를 사용하지 않지만 사용에 실제 IP. 모든 라우터는 LAN에 실제로 외부 IP 주소로 컴퓨터에 LAN에 액세스 할 수 있지만, 대부분은 것이다.

    당신이 당신의 진짜 IP를 개발 시스템에 액세스하는 경우에 당신은, 당신의 진짜 IP를 받아야하므로 localhost를 사용하지 않지만 사용에 실제 IP. 모든 라우터는 LAN에 실제로 외부 IP 주소로 컴퓨터에 LAN에 액세스 할 수 있지만, 대부분은 것이다.

  8. ==============================

    8.문제:

    문제:

    우리는 최근 프로젝트에 대한 비슷한 일을하려고했던 우리의 코드에 request.remote_ip를 사용하여 문제가 있고 있었다. 그것은 127.0.0.1 또는 :: 1을 반환 유지. 지오 코더 보석과 결합 할 때 그것은 우리에게 하늘의 배열을 제공하고 기본적으로 쓸모이었다.

    해결책:

    그것 안타 어떤의 IP 주소를 반환 telize.com에서 정말 좋은 API가있다. 우리는이 같은 것을 보았다 구현 된 코드 :

    위치 = Geocoder.search (HTTParty.get ( 'http://www.telize.com/ip') .body)

    그것은하지 그것을 할 수있는 가장 레일-Y 방법입니다,하지만 난 그것을 로컬 및 생산에 잘 작동하기 때문에이 꽤 좋은 솔루션입니다 생각합니다. 당신이 그들의 API 한도에 도달하면 유일한 잠재적 인 문제이지만, 작은 프로젝트에 대한이 아닌 문제가 될 것이다.

  9. from https://stackoverflow.com/questions/3887943/get-real-ip-address-in-local-rails-development-environment by cc-by-sa and MIT license