当我在开发模式下使用rails访问我的网站时,我想从用户客户端获得真实的ip地址?
但是当我键入request.remote_ip时,我得到的是ip地址127.0.0.1??
如何获取真实ip地址?
当我尝试curl -H"X-Forwarded-For: 8.8.8.8" http://httpbin.org/ip时,我得到了真实的ip地址,但当我尝试实现gem https://github.com/geokit/geokit-rails来获得基于国家/地区的ip地址时……我的ip地址无效吗?
我试试这个:
IpGeocoder.geocode('my.real.ip.address')并得到如下错误:
Geokit::Geocoders::GeocodeError: Geokit::Geocoders::GeocodeError但如果我尝试示例中的ip地址:
IpGeocoder.geocode('12.215.42.19')这很管用
=> Provider: hostip
Street:
City: Aurora
State: TX
Zip:
Latitude: 33.0582
Longitude: -97.5159
Country: US
Success: true 我的ip地址有什么问题?我从"curl -H“X-Forwarded-For获取真实的ip地址: 8.8.8.8”http://httpbin.org/ip“
如果我说错了,请告诉我,谢谢
发布于 2014-01-06 17:28:30
这里有一个可能会有帮助的想法:
本地主机
当您在开发中加载Rails服务器时,您正在访问您的本地主机。这意味着对此服务器的任何请求都将被视为本地连接(127.0.0.1)
您必须记住,Rails是一种服务器端技术,这意味着它只能处理接收到的请求(它与这些请求来自何处无关)。您可以通过ActiveDispatch::Request中间件大致了解一下这一点:
本地主机?()如果请求来自本地主机,则为
,则为127.0.0.1。
这意味着如果您向本地Rails服务器发送请求,它只会将其视为本地请求(127.0.0.1)。
GeoLocation IP
您的地理位置为您的WAN IP (远程IP)手动工作
原因是gem使用的DNS /服务将ping第三方服务器,该服务器将查找该IP的GeoLocation或其他地理位置:
利用hostip.info的基于IP的
位置查找。提供IP地址,返回城市名称和经纬度
与任何API一样,响应将取决于输入。问题是,因为Rails将您的请求视为本地请求(来自12.7.0.0.1),所以它只发送与GeoLocation无关的IP (它是您系统的本地请求,而不是整个系统的请求)。
JS
要解决这个问题,您必须找到一种方法来查找开发中的系统的WAN IP,您可以使用JS来实现:
How to get client's IP address using javascript only? (参见查德·格兰特的回答):
<script type="application/javascript">
function getip(json){
alert(json.ip); // alerts the ip address
}
</script>
<script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"></script>我还没有对此进行测试,但希望它能给您一个关于可能出错的想法
发布于 2014-01-18 08:19:43
尝试使用ngrok创建到本地服务器的隧道。
https://stackoverflow.com/questions/20944575
复制相似问题