獲取服務器訪問者IP
阿新 • • 發佈:2018-09-12
common com commons ddr .html rdo ges public cti 從今年7月24號,沒有玩遊戲到現在不知不覺(還是一個來月啊,這記性啊,我還以為過了老長時間了呢!)。真的像那個相對論中所說的那樣啊,冬天的火堆,夏天的火爐,同樣的時間,在第四維度是不一樣的世界。好了,筆者利用15分鐘的時間,探究一下怎麽獲取服務器訪問者的IP地址。
</head>
<body>
<div id="20180911"></div>
</body>
<script language=javascript>
var wshNetwork = new ActiveXObject("WScript.Network");
$("#20180911").html("域名 = "+ wshNetwork.UserDomain+"<br/>"
方法一、java通過request獲取
/** * 獲取當前訪問者IP地址 * @param request 請求 * @return IP地址 */ public static String getVisitIp(HttpServletRequest request) { /** * 在一般情況下使用Request.getRemoteAddr()即可, * 但是經過nginx等反向代理軟件後,這個方法會失效。 * 本方法先從Header中獲取X-Real-IP, * 如果不存在再從X-Forwarded-For獲得第一個IP(用,分割), * 如果還不存在則調用Request .getRemoteAddr() */ String ip = request.getHeader("X-Real-IP"); /**org.apache.commons.lang.StringUtils處理字符串類 * IsEmpty/IsBlank – 檢查字符串是否有內容。 * IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable – 判斷字符是否在字符串中。 */ if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { return ip; } ip = request.getHeader("X-Forwarded-For"); if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { // 多次反向代理後會有多個IP值,第一個為真實IP。 int index = ip.indexOf(‘,‘); if (index != -1) { return ip.substring(0, index); } else { return ip; } } else { return request.getRemoteAddr(); } }
調用:
HttpServletRequest request = ServletActionContext.getRequest();
String IP = AllServiceIsHere.getVisitIp(request);
System.err.println(IP);
走你:
方法二、java利用request逐步去除代理獲取
public static String getIp(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.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }
**同樣調用:**
HttpServletRequest request = ServletActionContext.getRequest();
String IP = AllServiceIsHere.getIp(request);
System.err.println(IP);
方法三、通過js獲取(IE適配哦,還需要ActiveX控件支持,得到的什麽鬼還沒看明白)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="js/jquery.js" ></script>
<body>
<div id="20180911"></div>
</body>
<script language=javascript>
var wshNetwork = new ActiveXObject("WScript.Network");
$("#20180911").html("域名 = "+ wshNetwork.UserDomain+"<br/>"
- "計算機名 = "+ wshNetwork.ComputerName+"<br/>"
- "登錄用戶名 = "+ wshNetwork.UserName+"<br/>"
)
</script>
</html>
啊,還是走後臺吧。省心!
獲取服務器訪問者IP