獲取客戶端的ip位址的方法是:request.getremoteaddr(),這種方法在大部分情況下都是
有效的。但是在通過了apache,squid等反向**軟體就不能獲取到客戶端的真實ip位址了。如果使用
了反向**軟體,用request.getremoteaddr()方法獲取的ip位址是:
127.0
.
0.1
或
192.168
.
1.110
,
而並不是客戶端的真實ip.
經過**以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的 ip,服務
器端應用也無法直接通過**請求的位址返回給客戶端。但是在**請求的http頭資訊中,增加了x-forwarded-for資訊。用以跟蹤原有的客戶端ip位址和原來客戶端請求的伺服器位址。當我們訪問index.jsp/時,其實並不是我們瀏覽器真正訪問到了伺服器上的index.jsp檔案,而是先由**伺服器
去訪問index.jsp ,**伺服器再將訪問到的結果返回給我們的瀏覽器,因為是**伺服器去訪問index.jsp的,所以index.jsp中通過request.getremoteaddr()的方法獲取的ip實際上是**伺服器
的位址,並不是客戶端的ip位址。
於是可得出獲得客戶端真實ip位址的方法一:
獲得客戶端真實ip位址的方法二:
可是,如果通過了多級反向**的話,x-forwarded-for的值並不止乙個,而是一串ip值,究竟哪個才
是真正的使用者端的真實ip呢?答案是取x-forwarded-for中第乙個非unknown的有效ip字串。如:
x-forwarded-for:
192.168
.
1.110
,
192.168
.
1.120
,
192.168
.
1.130
,
192.168
.
1.100
使用者真實ip為:
192.168
.
1.110
ps: nginx裡面x-forwarded-for配置的$http_x_forwarded_for是單個。配置的$proxy_add_x_forwarded_for是多個ip隧道的值。
獲取客戶端IP位址
title generating test data author wufeng4552 date 2009 09 23 10 34 02 功能 獲客戶 ip位址 if object id getclientip isnot null drop proc getclientip go create ...
客戶端獲取IP位址
string ip request.getheader x forwarded for string regex 2 0 4 d 25 0 5 01 d d?2 0 4 d 25 0 5 01 d d?if ip null ip.length 0 ip.equalsignorecase locali...
獲取客戶端IP 外網 位址的方法
獲取訪問者ip 在一般情況下使用request.getremoteaddr 即可,但是經過nginx等反向 軟體後,這個方法會失效。本方法先從header中獲取x real ip,如果不存在再從x forwarded for獲得第乙個ip 用,分割 如果還不存在則呼叫request getremot...