2009-08-04 6 views

Antwort

35

Danke: karim79 und Titanous.

Schreiben Sie den Code in Controller-

Für Client-IP:

request.remote_ip 

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

Für Server IP:

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

Was ist die Server-IP? Ist es der Client-Server? –

+0

Wo wurde das Anfrageobjekt definiert? – user938363

+2

Das Request-Objekt wird von Rails der Controller-Aktionsmethode zur Laufzeit zur Verfügung gestellt (wenn eine Browser-Anfrage erfolgt). – thekingoftruth

84

Von Ihrem Controller:

request.remote_ip 

Wenn Sie Apache vor einem Mischlings verwenden, dann kehrt remote_ip die Quelladresse des Antrags, die in diesem Fall lokaler Host sein werden, da die Apache-Webserver die Anforderung stellt, so setzen diese stattdessen in Ihrem Controller:

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

die Server-IP zu sehen bekommen:

Getting the Hostname or IP in Ruby on Rails

+0

Dies funktioniert, aber ich brauche sowohl Client-IP und auch Server IP zusammen –

+0

Das liegt daran, dass Ihr Server die Anforderung an den Rails-Server weiterleitet. Sie müssen Ihren Front-Server (Apache oder was auch immer Sie haben mögen) einrichten, um auch die IP-Adresse der ursprünglichen Anfrage zu senden. Kannst du mehr Details über deine Konfiguration angeben? –

+0

Danke Good Job Kumpel es funktioniert –