59

Can anyone please help how to get client IP and also server IP using Ruby on Rails?

atw
  • 5,428
  • 10
  • 39
  • 63
Senthil Kumar Bhaskaran
  • 7,371
  • 9
  • 43
  • 56

2 Answers2

85

From your controller:

request.remote_ip

If you are using apache in front of a mongrel, then remote_ip will return the source address of the request, which in this case will be local host because the Apache web server is making the request, so instead put this in your controller:

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"]

To get the server IP see:

Getting the Hostname or IP in Ruby on Rails

Community
  • 1
  • 1
karim79
  • 339,989
  • 67
  • 413
  • 406
  • This is working but I need both client Ip and also server IP together – Senthil Kumar Bhaskaran Aug 04 '09 at 11:36
  • That is because your server is proxying the request to the rails server. You must set up your front server (apache, or whatever you may have) to send also the original request's IP. Can you give more details about the configuration you have? – Vlad Zloteanu Aug 04 '09 at 11:40
35

Thanks: karim79 and Titanous.

Write the code in Controller

For Client IP:

request.remote_ip

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"]

For 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
sawa
  • 165,429
  • 45
  • 277
  • 381
Senthil Kumar Bhaskaran
  • 7,371
  • 9
  • 43
  • 56