在jsp裡,獲取客戶端的ip位址的方法是:request.getremoteaddr(),這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向**軟體就不能獲取到客戶端的真實ip位址了。
如果使用了反向**軟體,將 的url反向**為 / 的url時,用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位址。
可是當我訪問 /index.jsp/ 時,返回的ip位址始終是unknown,也並不是如上所示的127.0.0.1 或 192.168.1.110了,而我訪問index.jsp 時,則能返回客戶端的真實ip位址,寫了個方法去驗證。原因出在了squid上。squid.conf 的配製檔案 forwarded_for 項預設是為on,如果 forwarded_for 設成了 off 則:x-forwarded-for: unknown
可是,如果通過了多級反向**的話,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
用java獲得客戶端真實的ip位址
在jsp裡,獲取客戶端的ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,用request.getremoteaddr 方法獲取的ip位址是 127...
獲得客戶端真實ip位址
在jsp頁面裡,獲取網頁客戶端的ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,用request.getremoteaddr 方法獲取的ip位址是...
獲得IP位址
在asp 中使用 request.servervariables remote addr 來取得客戶端ip 位址但如果客戶端是使用 伺服器來訪問那取到就是 伺服器ip 位址而不是真正客戶端 ip 位址 要想透過 伺服器取得客戶端真實ip 位址就要使用 request.servervariables ...