2016-03-07 24 views
1

我正在從我的機器向服務器發送請求。我的機器的ip地址是192.168.1.217在java中獲取錯誤的IP地址

在服務器端,我打印客戶端IP地址,但是當我使用request.getRemoteAddr()打印IP地址時,我將它作爲192.168.0.5

當我打印IP地址request.getHeader("X-FORWARDED-FOR")我得到它作爲null

我使用的是Apache Tomcat服務器。

+2

你有沒有在服務器端配置任何代理/防火牆? –

+1

您的網絡中有哪臺機器的地址是192.168.0.5?這個信息可能會有幫助。 – f1sh

+0

我已經與網絡人員詢問過這臺機器,他們告訴我這是防火牆。我對防火牆一無所知。請幫忙。 –

回答

3

如果該IP地址(192.168.0.5)是(或a)防火牆,則它是正確的IP地址。您的服務器端代碼正在報告它所看到的「客戶端」IP地址,並且它不能做得更好。

在一般情況下,有幾個可能的解釋爲的是怎麼回事:

  • 防火牆可以運行的HTTP代理和您的客戶機可以通過所有的HTTP請求來配置發送代理。如果客戶端能夠直接與服務器通話,那麼您可以修改客戶端的代理設置以將服務器視爲例外。

  • 防火牆可能會提供NAT服務,將您網絡的一部分與另一部分隔離(例如)。如果這是問題,那麼您將需要您的網絡管理員的幫助。

  • 這是常見的(而且往往「良好做法」)上運行(說)端口8080 Tomcat服務器,並把它後面的反向代理端口80上

在你的情況,第一種解釋很可能。


@andrucz建議使用Tomcat遠程IP過濾器。這可以在某些情況下工作,但不是全部,它使用的信息很容易被「欺騙」

底線是一個web服務器無法看到客戶端的真實IP地址。所以這是不明智的實施你的服務取決於在這個。