2011-11-20 65 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功能,所以你的公司可能需要讓每個人的瀏覽器更新^^。