2011-11-20 118 views
2

我使用Ruby on Rails作为服务器端框架,但我确信该解决方案是跨平台的。如何向用户显示其真实IP地址(代理后)

我想向用户显示他的真实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版本)

+0

这取决于代理转发哪些信息。有些人可能会使用“X-Forwarded-For”,但如果没有(或者如果没有类似的话),那么你可能会运气不好。 –

+0

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

+0

根据用户的连接情况,这是不可能的。例如,如果用户的路由器正在使用VPN。路由器本身会使用VPN来隧道连接,并且用户拥有的唯一IP就是他的本地网络与路由器的IP。 – felipemaia

回答

2

它是一个兴趣问题,但我要去捎带坏消息。无论您使用的平台或代码如何,您都无法获得100%解决方案。

让我来解释一下, 一些代理服务器在一个头文件(通常是x-forwarded-for)中转发始发者ip。这不是100%。

的Javascript在客户端可能(待定安全限制)给你的客户端IP,但是,这可能是一个本地网络的IP(如192.168 。)

UPD:请在下面看到我的评论对于如果所有用户都在公司网络上都可以工作的javascript解决方案描述。

+0

是的。我想显示本地的网络IP!什么是JS解决方案? – petRUShka

+0

我强调了5月。看看javascript的框架,它没有访问机器的IP地址。如果用户在公司网络上连接,则可以将js文件放在网络中,并将数据发送到最终的网络服务器。否则,这是不可能的。 –

+0

澄清我对未来读者的评论。如果你在本地网络中有一个JavaScript文件,它可以从Web应用程序中引用。标准的远程ip查找代码会给出本地ip地址。这可以发送到网络服务器。 –

0

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

连接之后,您可以读取IP以供Ruby访问(通过文件系统api或其他)。

下面是具有使用Node.js的一个WebSocket伺服器的一个很好的例子,一个简单的错误日志应用:http://gonzalo123.wordpress.com/2011/05/09/real-time-monitoring-php-applications-with-websockets-and-node-js/

至于如何的WebSockets与代理交互,快速搜索我了解到,与SSL确保WebSocket的意志使您能够绕过代理。 (编号:http://showmetheco.de/articles/2011/2/diving-into-html5-with-websockets-and-perl.html

虽然这个想法是我的头顶,我不能为你做所有的研究,但这应该让你开始一个潜在的解决方案。

顺便说一句Websockets是一个HTML5功能,所以你的公司可能需要让每个人的浏览器更新^^。