2009-08-04 25 views

risposta

35

Grazie: karim79 e Titanous.

scrivere il codice in controller

Per IP del client:

request.remote_ip 

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

Per IP Server:

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

Qual è l'ip del server? È il server dei client? –

+0

dove è stato definito l'oggetto richiesta? – user938363

+2

L'oggetto richiesta viene fornito da Rails al metodo di azione del controller durante il runtime (quando viene effettuata una richiesta browser). – thekingoftruth

84

dal controller:

request.remote_ip 

Se si utilizza Apache di fronte a un bastardo, quindi remote_ip restituirà l'indirizzo di origine della richiesta, che in questo caso sarà host locale perché il server web Apache sta facendo la richiesta, così invece mettere questo nel controller:

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

Per ottenere l'IP del server vedere:

Getting the Hostname or IP in Ruby on Rails

+0

Questo è il lavoro, ma ho bisogno di entrambi client server IP e anche IP insieme –

+0

Ciò accade perché il server sta inoltrando la richiesta al server dei binari. Devi configurare il tuo server principale (apache, o qualunque cosa tu abbia) per inviare anche l'IP della richiesta originale. Puoi fornire maggiori dettagli sulla configurazione che hai? –

+0

Grazie Buon compagno di lavoro sta funzionando –