package com.yami.trading.common.util; import java.util.LinkedHashSet; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; /** * IP帮助工具 */ public class IPHelper { private static final String UNKNOWN = "unknown"; /** * IP分割符号 */ private static final Pattern IP_DELIMITER=Pattern.compile("[.]|[:]"); /** * 本地回环IP地址集合 */ private static final LinkedHashSet localIPSet = new LinkedHashSet(); static { localIPSet.add("127.0.0.1"); localIPSet.add("0:0:0:0:0:0:0:1"); } /** * 是否为本地回环地址 * @param srcIp 比较的源地址 * @return 是否为回环地址 */ public static final boolean isLoopback(String srcIp) { return localIPSet.contains(srcIp); } /** * 比较两个IP地址的IP段是否相同 * @param srcIp 原始地址 * @param dstIp 目标地址 * @return IP段是否相同 */ public static final boolean equalIpSegment(String srcIp,String dstIp) { if(null==srcIp || (srcIp=srcIp.trim()).isEmpty()) return false; if(null==dstIp || (dstIp=dstIp.trim()).isEmpty()) return false; return getIPSegment(srcIp).equals(getIPSegment(dstIp)); } /** * 获取IP段 * @param ip IP地址 * @return IP地址段 * @see #isCorrectIpRegular */ public static final String getIPSegment(String ip) { if(null==ip || (ip=ip.trim()).isEmpty()) return null; String[] bArray=IP_DELIMITER.split(ip); int lastIndex=ip.length()-(bArray[bArray.length-1].length()+1); return -1==lastIndex?ip:ip.substring(0, lastIndex); } /** * 得到用户的真实地址,如果有多个就取第一个 * @return */ public static final String getIpAddr() { HttpServletRequest request = ApplicationUtil.getServletRequest(); if (request == null) return null; 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(); } String[] ips = ip.split(","); return ips[0].trim(); } }