从今年7月24号,没有玩游戏到现在不知不觉(还是一个来月啊,这记性啊,我还以为过了老长时间了呢!)。真的像那个相对论中所说的那样啊,冬天的火堆,夏天的火炉,同样的时间,在第四维度是不一样的世界。好了,笔者利用15分钟的时间,探究一下怎么获取服务器访问者的IP地址。

方法一、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>
</head>
<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>

啊,还是走后台吧。省心!