2013-07-31 192 views
29

我想在我的webApplication中打印登錄用戶的IP地址。如果用戶使用IP地址192.168.10.120:8080/WebApplication從另一臺PC(位於同一網絡下,因爲網絡應用程序在我的電腦上運行)連接,則代碼request.getRemoteAddr()request.getLocalAddr())會返回其IP地址。當我從運行Web應用程序的電腦登錄時,我得到這個IP地址0:0:0:0:0:0:0:1。

這是爲什麼?這些命令之間有什麼區別(我應該使用哪個?)。非常感謝!使用request.getRemoteAddr()返回0:0:0:0:0:0:0:1

+4

localhost將返回該IP。在其他計算機上,您將看到實際的IP。 – Makky

+0

謝謝@Makky你知道這兩個命令之間的區別嗎? – yaylitzis

+0

'getLocalAddr()'獲取機器的IP地址以接收請求。 [來源](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getLocalAddr())。相反,'getRemoteAddr()'獲得機器的IP地址以請求資源[Source](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRemoteAddr() )。 –

回答

29

就你而言,由於你試圖在本地機器上訪問它,所以它會返回該值。但是,讓你的朋友訪問它一個,你會收到預期的結果與getRemoteAddr

根據JavaDoc:

getRemoteAddr - 返回發送請求的客戶機或最後一個代理服務器的IP地址

getLocalAddr - 返回接收請求的接口的IP地址。

4

getRemoteAddr()解決你的目的,但如果客戶端在任何代理,那麼你將獲得代理的IP地址:

返回發送請求的客戶機或最後一個代理 的互聯網協議(IP)地址。

getLocalAddr()返回應用程序正在運行的服務器的IP。

27

當我們從IPv4轉向IPv6時,他們正在將環回地址(localhost)從127.0.0.1更改爲0:0:0:0:0:0:0:1,這就是爲什麼您得到此地址。

至於功能:

  • getRemoteAddr()返回客戶端的IP

  • getLocalAddr()返回應用 上

相關問題