首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在开发模式下使用rails访问我的网站时从用户客户端获取真实ip地址

如何在开发模式下使用rails访问我的网站时从用户客户端获取真实ip地址
EN

Stack Overflow用户
提问于 2014-01-06 14:51:44
回答 2查看 1K关注 0票数 0

当我在开发模式下使用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地址无效吗?

我试试这个:

代码语言:javascript
复制
IpGeocoder.geocode('my.real.ip.address')

并得到如下错误:

代码语言:javascript
复制
Geokit::Geocoders::GeocodeError: Geokit::Geocoders::GeocodeError

但如果我尝试示例中的ip地址:

代码语言:javascript
复制
IpGeocoder.geocode('12.215.42.19')

这很管用

代码语言:javascript
复制
=> 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

如果我说错了,请告诉我,谢谢

EN

回答 2

Stack Overflow用户

发布于 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或其他地理位置:

来自GeoKit GitHub

利用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? (参见查德·格兰特的回答):

代码语言:javascript
复制
<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>

我还没有对此进行测试,但希望它能给您一个关于可能出错的想法

票数 2
EN

Stack Overflow用户

发布于 2014-01-18 08:19:43

尝试使用ngrok创建到本地服务器的隧道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20944575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档