Method: Rack::Request#ip

Defined in:
lib/rack/request.rb

#ipObject



346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
# File 'lib/rack/request.rb', line 346

def ip
  remote_addrs = split_ip_addresses(@env['REMOTE_ADDR'])
  remote_addrs = reject_trusted_ip_addresses(remote_addrs)

  return remote_addrs.first if remote_addrs.any?

  forwarded_ips = split_ip_addresses(@env['HTTP_X_FORWARDED_FOR'])

  if client_ip = @env['HTTP_CLIENT_IP']
    # If forwarded_ips doesn't include the client_ip, it might be an
    # ip spoofing attempt, so we ignore HTTP_CLIENT_IP
    return client_ip if forwarded_ips.include?(client_ip)
  end

  return reject_trusted_ip_addresses(forwarded_ips).last || @env["REMOTE_ADDR"]
end