2009-08-04 10 views

Odpowiedz

35

Dzięki: karim79 i Titanous.

Wpisz kod w kontrolerze

Dla IP klienta:

request.remote_ip 

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

Dla IP serwera:

require 'socket' 

def local_ip 
    orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily 

    UDPSocket.open do |s| 
    s.connect '64.233.187.99', 1 
    s.addr.last 
    end 
ensure 
    Socket.do_not_reverse_lookup = orig 
end 
+0

Co to jest IP serwera? Czy to serwer klientów? –

+0

gdzie został zdefiniowany obiekt żądania? – user938363

+2

Obiekt żądania jest dostarczany przez Railsy do metody akcji kontrolera w czasie wykonywania (gdy wykonywane jest żądanie przeglądarki). – thekingoftruth

84

Od kontrolera:

request.remote_ip 

Jeśli używasz apache przed kundla, wtedy remote_ip powrócić adres źródłowy wniosku, który w tym przypadku będzie miejscowy gospodarz, ponieważ serwer WWW Apache czyni wniosek, więc zamiast umieścić to w kontrolerze:

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

Aby uzyskać IP serwera patrz:

Getting the Hostname or IP in Ruby on Rails

+0

To działa, ale muszę zarówno IP klienta, a także serwera IP razem –

+0

Dzieje się tak dlatego, że serwer pośredniczy w żądaniu do serwera railsowego. Musisz skonfigurować serwer główny (apache lub cokolwiek innego), aby przesłać także adres IP pierwotnego żądania. Czy możesz podać więcej szczegółów na temat konfiguracji? –

+0

Dzięki kumpel Good Job to działa –