2009-08-04 10 views

Répondre

35

Remerciements: karim79 et Titanous.

Recopiez le code dans le contrôleur

Pour IP Client:

request.remote_ip 

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

Pour le serveur 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

Quelle est l'adresse IP du serveur? Est-ce le serveur des clients? –

+0

Où l'objet de requête a-t-il été défini? – user938363

+2

L'objet de requête est fourni par Rails à la méthode d'action du contrôleur pendant l'exécution (lorsqu'une requête de navigateur est effectuée). – thekingoftruth

84

de votre contrôleur:

request.remote_ip 

Si vous utilisez apache devant une bâtarde, puis remote_ip renvoie l'adresse source de la demande, qui dans ce cas sera l'hôte local car le serveur web Apache est fait la demande, donc au lieu de mettre dans votre contrôleur:

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

Pour obtenir l'adresse IP du serveur voir:

Getting the Hostname or IP in Ruby on Rails

+0

Cela fonctionne mais j'ai besoin à la fois client IP et aussi serveur IP ensemble –

+0

C'est parce que votre serveur transmet la demande au serveur rails. Vous devez configurer votre serveur frontal (apache, ou tout ce que vous pourriez avoir) pour envoyer également l'adresse IP de la demande d'origine. Pouvez-vous donner plus de détails sur la configuration que vous avez? –

+0

Merci bon travail mon pote il fonctionne –

Questions connexes