Javascript 如何向用户显示其真实IP地址(在代理后面)

Javascript 如何向用户显示其真实IP地址(在代理后面),javascript,ruby-on-rails,flash,proxy,ip,Javascript,Ruby On Rails,Flash,Proxy,Ip,我使用RubyonRails作为服务器端框架,但我确信解决方案是跨平台的 我想向用户显示他的真实ip地址。该应用程序部署在企业网络中。大多数用户直接连接到应用程序,不需要代理、NAT等,但其中一些用户使用代理 现在他们看到了代理服务器的IP地址 向他们展示真实IP地址的最佳方式是什么 正如我所看到的,仅仅使用发球技术是不可能的。所以解决方案应该是使用JS(几乎所有用户都支持JS)、Flash(大约80%的用户使用它)或JAVA(大约50%)。若解决方案是rails插件那个就太好了,但它并不是那个

我使用RubyonRails作为服务器端框架,但我确信解决方案是跨平台的

我想向用户显示他的真实ip地址。该应用程序部署在企业网络中。大多数用户直接连接到应用程序,不需要代理、NAT等,但其中一些用户使用代理

现在他们看到了代理服务器的IP地址

向他们展示真实IP地址的最佳方式是什么

正如我所看到的,仅仅使用发球技术是不可能的。所以解决方案应该是使用JS(几乎所有用户都支持JS)、Flash(大约80%的用户使用它)或JAVA(大约50%)。若解决方案是rails插件那个就太好了,但它并不是那个么重要


UPD。不幸的是,X-Forwarded-For标头没有有趣的信息

UPD2。我想显示一个本地网络ip(例如192.168..)


UPD3。几乎所有的客户端浏览器都是Internet Explorer(7,8,6版本)

这是一个有趣的问题,但我要告诉你一个坏消息。无论您使用何种平台或代码,您都无法让解决方案100%正常工作

让我解释一下, 一些代理在头中转发发端ip(通常为x-forwarded-for)。这不是100%

客户端的Javascript可能(待定的安全限制)为您提供客户端ip,但是,这可能是本地网络ip(例如192.168..)


UPD:如果所有用户都在公司网络上,请参阅下面我的评论,了解javascript解决方案说明。

您可以使用node.js作为websocket服务器,在客户端有一个javascript websocket应用程序

一旦连接,您就可以读取IP以供Ruby访问(通过文件系统api或其他方式)

下面是一个简单的错误日志应用程序,它有一个使用node.js的Websocket服务器的好例子:

至于websocket如何与代理交互,我通过快速搜索了解到,使用SSL保护websocket将使您能够绕过代理。(参考号:)

虽然我脑子里没有这个想法,但我不能为你做所有的研究,但这应该会让你开始找到一个潜在的解决方案


顺便说一句,WebSocket是HTML5的一项功能,因此您的公司可能需要更新每个人的浏览器。^^。

这取决于代理转发的信息。有些人可能会使用
X-Forwarded-For
,但如果不使用(或者没有类似的用法),则您可能运气不佳。不幸的是,X-Forwarded-For标头没有有趣的信息。根据用户的连接情况,这是不可能的。例如,如果用户的路由器使用VPN。路由器本身将使用VPN来隧道连接,用户拥有的唯一IP是其与路由器的本地网络IP。一些用户(较小部分)使用VPN进入整个公司网络。但在这种情况下,我对他们在VPN网络中的本地ip地址很感兴趣。petRUShka,请参阅下面我回答中的注释。只有当所有用户都在公司网络上,您才可以在其中放置javascript文件。是。我想显示本地网络IP!什么是JS解决方案?我强调了五月。查看javascript框架,它没有访问机器ip地址的权限。如果用户在公司网络上连接,您可以将js文件放在网络上,并将数据发送到最终的Web服务器。否则,这是不可能的。为了将来的读者澄清我的上述评论。如果您在本地网络中有javascript文件,则可以从web应用程序引用该文件。标准的远程ip查找代码将给出本地ip地址。然后可以将其发送到Web服务器。谢谢。但应用程序也在本地网络中,所以在我的情况下,你的想法不会有帮助…和你的用户在同一个网络中?如果是这样,远程ip查找将按原样工作。如果没有,为什么我的解决方案不起作用?你能提供更多的信息吗?