Java獲取客戶端/訪問者真實IP地址的兩種方法
在JSP裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。 http://bbs.it-home.org/ 的URL時,用request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1 或 192.168.1.110,而並不是客戶端的真實IP。
經過代理以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的IP,伺服器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTP頭資訊中,增加了X-FORWARDED-FOR資訊。用以跟蹤原有的客戶端IP地址和原來客戶端請求的伺服器地址。當我們訪問http://bbs.it-home.org/index.jsp/
時,其實並不是我們瀏覽器真正訪問到了伺服器上的index.jsp檔案,而是先由代理伺服器去訪問http://192.168.1.110:2046/index.jsp ,代理伺服器再將訪問到的結果返回給我們的瀏覽器,因為是代理伺服器去訪問index.jsp的,所以index.jsp中通過request.getRemoteAddr()的方法獲取的IP實際上是代理伺服器的地址,並不是客戶端的IP地址。
於是可得出獲得客戶端真實IP地址的方法一:
-
public String getRemortIP(HttpServletRequest request) {
-
if (request.getHeader("x-forwarded-for") == null) {
-
return request.getRemoteAddr();
-
}
-
return request.getHeader("x-forwarded-for");
- }
於是可得出獲得客戶端真實IP地址的方法二:
-
public String getIpAddr(HttpServletRequest request) {
-
String ip = request.getHeader("x-forwarded-for");
-
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-
ip = request.getHeader("Proxy-Client-IP");
-
}
-
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-
ip = request.getHeader("WL-Proxy-Client-IP");
-
}
-
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-
ip = request.getRemoteAddr();
-
}
-
return 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
相關推薦
Java獲取客戶端/訪問者真實IP地址的兩種方法
在JSP裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。在JSP裡,獲取客戶端的IP地址的方法是:request.get
Java獲取客戶端使用者真實IP地址
在JSP裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid,nginx等反向代理軟體就不能獲取到客戶端的真實IP地址了。 如果使用了反向代理軟體,將http://192.168.1.110
php 獲取客戶端的真實IP地址 和 檢查客戶端從什麼地方過來的請求
/* * 函式功能: 獲取客戶端的真實IP地址 * * 為什麼要用這個函式? * 因為我們線上Web伺服器絕大部分都處於Netscaler(簡稱NS)後面,客戶端訪問的地址統一由NS排程 * 由NS排程的訪問其實就是NS做了一層代理, 這期間就有一個問題, 因為真實
Java獲取客戶端所在的IP地址和伺服器地址
/** 2 * 獲取本地IP地址 3 * @return 4 */ public static void main(String[] args) { 2
Java獲取請求客戶端的真實IP地址
整理網友的材料,最後有原始碼,親測能解決所有java獲取IP真實地址的問題整理的這裡:1、連結12、連結2JSP裡,獲取客戶端的IP地址的方法是: request.getRemoteAddr() ,這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向
獲取當前訪問客戶端的真實IP地址(含內網地址)
在JSP裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。如果使用了反向代理軟體,用request.getRemoteAd
獲取當前訪問客戶端的真實IP地址,辨別是否為內網?
Test.jsp 測試頁面 TestAddress tsetadres = new TestAddress(); String addIP = request.getRemoteAddr(); if(!addIP.equals("")) { String relIp
Java獲取客戶端及區域網ip和埠地址
在java專案Controller層加入下面程式碼: public Map<String,Object>selectAccessory(HttpServletRequest request){ //public Map<String,Object>
nginx反向代理後獲取不到客戶端的真實ip地址
location / { proxy_pass http://127.0.0.1:10678; proxy_set_header Host $host; //加入下面配置 proxy_set_header X-Real-IP $remo
獲取客戶端的真實IP
pan bsp 公網 @param add acea user sig n) /** * 獲取真實IP地址 * <p>使用getRealIP代替該方法</p> * @param request req * @
JAVA獲取客戶端請求電腦IP,作業系統等等各種資訊
HttpServletRequest request = ServletActionContext.getRequest(); System.out.println("瀏覽器基本資訊:"+reque
Java獲取客戶端真實IP地址的兩種方法
在JSP裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。 如果使用了反向代理軟體,將http://192.168
Java獲取客戶端真實IP地址
1、我們一般在程式開發時,總會用到這種獲取訪問者IP的功能,以便記錄客戶端的登入和訪問行為。一般情況下,我們可以使用 request 的 getRemoteAddr() 方法獲取客戶端實際 IP ,但是 Nginx 使用反向代理後,我們使用 getRemo
java獲取客戶端ip地址
public static String getIp2(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if(StringUtils.isNotEmpty(ip) && !"unKn
java IP地址工具類,java IP地址獲取,java獲取客戶端IP地址
java IP地址工具類,java IP地址獲取,java獲取客戶端IP地址 ================================ ©Copyright 蕃薯耀 2019年1月11日 http://fanshuyao.iteye.com/ impo
Java獲取客戶端IP
不為 pty 獲取 code 中間 clas 代理服務器 gin servle 在開發工作中,我們常常需要獲取客戶端的IP。一般獲取客戶端的IP地址的方法是:request.getRemoteAddr();但是在通過了Apache,Squid等反向代理軟件就不能獲取到客戶端
java獲取客戶端IP和服務器IP
ati () ted unknown lock back thead ssi 簡單的 一、Java獲取服務器IP(轉自:https://www.cnblogs.com/george93/p/6306579.html) //方法一,也是最簡單的一種。 String
java web獲取客戶端外網ip和所在區域
@參考文章1、@參考文章2、@參考文章3、@參考文章4,@之前同事的專案 controller @Controller @RequestMapping("/home") public class HomeController { @RequestMappin
Dorado7 AjaxAction Java獲取客戶端IP
@Expose @DataProvider public String getCurrentEmployeeUserPrivilege(HttpServletRequest request, HttpServletResponse response){ String ip = req
PHP獲取真實客戶端的真實IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
REMOTE_ADDR 是你的客戶端跟你的伺服器“握手”時候的IP。如果使用了“匿名代理”,REMOTE_ADDR將顯示代理伺服器的IP。 HTTP_CLIENT_IP 是代理伺服器傳送的HTTP頭。如果是“超級匿名代理”,則返回none值。同樣,REMOTE_ADDR也會被替換為這個代