您的位置:首页 > 其它

IP相关工具类

2016-04-19 17:17 246 查看
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.regex.Pattern;

/**
* Created by IDEA
* User: mashaohua
* Date: 2016-04-13 9:13
* Desc:
*/
public class IPUtil {

/**
* 获取客户端ip
*
*/
public static String getIp(HttpServletRequest request) {

String ipAddress = request.getHeader("x-forwarded-for");

if(!verifyIp(ipAddress)) {
ipAddress = request.getHeader("X-Real-IP");
if(!verifyIp(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
if(!verifyIp(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
if(!verifyIp(ipAddress)) {
ipAddress = request.getRemoteAddr();
if(ipAddress.equals("127.0.0.1")){
//根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
ipAddress = inet.getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
}
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress != null && ipAddress.length() > 15){ //"***.***.***.***".length() = 15
if(ipAddress.indexOf(",") > 0){
ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
}
}

return ipAddress;
}

private final static Pattern ipPattern = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b");

public static boolean verifyIp(String ip) {
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip))
return false;

return ipPattern.matcher(ip).matches();
}

public static long ipToLong(String ip){
long[] array = new long[4];
int position1 = ip.indexOf(".");
int position2 = ip.indexOf(".", position1 + 1);
int position3 = ip.indexOf(".", position2 + 1);
array[0] = Long.parseLong(ip.substring(0, position1));
array[1] = Long.parseLong(ip.substring(position1+1, position2));
array[2] = Long.parseLong(ip.substring(position2+1, position3));
array[3] = Long.parseLong(ip.substring(position3+1));
return (array[0] << 24) + (array[1] << 16) + (array[2] << 8) + array[3];
}

public static String ipToString(long ip){
StringBuffer sb = new StringBuffer("");
sb.append(String.valueOf((ip >>> 24)));
sb.append(".");
sb.append(String.valueOf((ip & 0x00FFFFFF) >>> 16));
sb.append(".");
sb.append(String.valueOf((ip & 0x0000FFFF) >>> 8));
sb.append(".");
sb.append(String.valueOf((ip & 0x000000FF)));
return sb.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: