gko*_*lan 41 geocoding ruby-on-rails ip-address
我有Rails 2.3.8,Ruby 1.8.7,Mongrel Web Server和MySQL数据库.
我处于开发模式,我需要找到真正的IP地址
当我使用时,request.remote_ip我正在获取IP127.0.0.1
我知道我得到了127.0.0.1因为我在本地机器上开发..但即使我在本地机器上,有没有办法获得真正的IP地址?
我在我的控制器中使用下面提到的这些,我得到的就是127.0.0.1视图中的所有这些.
request.remote_ip
request.env["HTTP_X_FORWARDED_FOR"]
request.remote_addr
request.env['REMOTE_ADDR']
Run Code Online (Sandbox Code Playgroud)
Mis*_*cha 32
据我所知,没有标准的方法来获取本地计算机的远程地址.如果您需要远程地址来(测试)地理编码,我建议将127.0.0.1添加到数据库表中,该表与匹配IP地址的地址相匹配.
作为最后的手段,您也可以硬编码您的远程地址.像这样:
class ApplicationController < ActionController::Base
def remote_ip
if request.remote_ip == '127.0.0.1'
# Hard coded remote address
'123.45.67.89'
else
request.remote_ip
end
end
end
class MyController < ApplicationController
def index
@client_ip = remote_ip()
end
end
Run Code Online (Sandbox Code Playgroud)
Swa*_*and 16
我不认为你会在localhost上得到你的'real-ip',其原因实际上在于TCP/IP.
远程IP地址取决于发送请求的网络.由于它是TCP/IP的一部分,在通信时发送您的IP地址,因此它总是转换为目标计算机可能理解的相对IP地址.当请求在您的子网内时,它是您的本地IP.当它通过您的服务提供商进入网络时,它会假设一个全局IP,可以追溯到服务提供商(注意:这是有争议的,取决于您的网络设置).
因此,如果您在本地进行测试,那么您将体验到127.0.0.1.如果您通过本地网络发送,它将是您网络中的IP.例如,我办公室网络中的机器IP为192.168.1.7,如果我通过同一网络中的另一台计算机从3000端口访问我的应用程序,比如从192.168.1.13,那么我得到request.remote_ip为192.168.1.13
这意味着,当您使用localhost时,127.0.0.1 是您真正的IP.同样在我提到的示例中,192.168.1.13是发送请求的机器的真实IP.
BSB*_*BSB 13
这就是我现在通常做的事情:
if Rails.env.production?
request.remote_ip
else
Net::HTTP.get(URI.parse('http://checkip.amazonaws.com/')).squish
end
Run Code Online (Sandbox Code Playgroud)
取决于您如何访问网址.
如果您使用http://127.0.0.1/....或访问网址http://localhost/....,您将获得127.0.0.1远程IP.如果您在局域网上,请使用http:// {lan-ip}/....
例如 http://172.20.25.210/.......
我必须这样做:
require 'socket'
Socket.ip_address_list.detect(&:ipv4_private?)&.ip_address
Run Code Online (Sandbox Code Playgroud)