記錄 獲取訪問者的真實IP

2021-10-01 16:49:53 字數 2228 閱讀 3030

場景描述:伺服器端接收客戶端請求的時候,一般需要進行簽名驗證,客戶端ip限定等情況,在進行客戶端ip限定的時候,需要首先獲取到真實的ip。

ip訪問一般分為兩種情況:

方式一、客戶端未經過**,直接訪問伺服器端(nginx,squid,haproxy);

方式二、客戶端通過多級**,最終到達伺服器端(nginx,squid,haproxy);

客戶端請求資訊都包含在httpservletrequest中,可以通過方法getremoteaddr()獲得該客戶端ip。

方式一形式,可以直接獲得該客戶端真實ip。

方式二中通過**的形式,此時經過多級反向的**,通過方法getremoteaddr()得不到客戶端真實ip,可以通過x-forwarded-for獲得**後請求資訊。當客戶端請求被**,ip將會追加在其後並以逗號隔開,例如:10.47.103.13,4.2.2.2,10.96.112.230。

請求中的引數:

request.getheader(「x-forwarded-for」) : 10.47.103.13,4.2.2.2,10.96.112.230

request.getheader(「x-real-ip」) : 10.47.103.13

request.getremoteaddr():10.96.112.230

最終準確的客戶端資訊為:

x-forwarded-for 不為空,則為逗號前第乙個ip ;

x-real-ip不為空,則為該ip ;

否則為getremoteaddr() ;

x-forwarded-for:這是乙個 squid 開發的字段,只有在通過了http**或者負載均衡伺服器時才會新增該項。格式為x-forwarded-for:client1,proxy1,proxy2,一般情況下,第乙個ip為客戶端真實ip,後面的為經過的**伺服器ip。現在大部分的**都會加上這個請求頭。

proxy-client-ip/wl- proxy-client-ip:這個一般是經過apache http伺服器的請求才會有,用apache http做**時一般會加上proxy-client-ip請求頭,而wl-proxy-client-ip是他的weblogic外掛程式加上的頭。

http_client_ip:有些**伺服器會加上此請求頭。

x-real-ip:nginx**一般會加上此請求頭。

/** 

* 獲取使用者真實ip位址,不使用request.getremoteaddr()的原因是有可能使用者使用了**軟體方式避免真實ip位址,

* 可是,如果通過了多級反向**的話,x-forwarded-for的值並不止乙個,而是一串ip值

("獲取客戶端ip: "

+ ip)

;return ip;

}

tomcat 獲取訪問者真實IP

通過下面這段 可以獲取 string ip request.getheader x forwarded for if ip null ip.length 0 unknown equalsignorecase ip if ip null ip.length 0 unknown equalsignore...

怎樣獲取訪問者真實IP位址

在 jsp裡,獲取客戶端的 ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,用request.getremoteaddr 方法獲取的ip位址是 1...

Java jsp獲取訪問者真實的IP位址

在jsp裡,獲取客戶端的ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,用request.getremoteaddr 方法獲取的ip位址是 127...