/** * ip地址辅助类 * * @author chenxin * @version [版本号, 2012-5-21] * @see [相关类/方法] * @since [产品/模块版本] */ public class IPUtil { /** * 获取request的IP * @param request * @return */ public static String getRequestIP(HttpServletRequest request) { String ip = null; if (request != null) { // 如果登录提供的IP地址为空则取request的IP ip = request.getHeader("iv-remote-address"); if (ip == null) { ip = request.getRemoteAddr(); } } return ip; } public static String getIPBinaryString(String IPStr){ String[] IPStrArray = IPStr.split("\\."); int IPStr1 = Integer.parseInt(IPStrArray[0]); int IPStr2 = Integer.parseInt(IPStrArray[1]); int IPStr3 = Integer.parseInt(IPStrArray[2]); int IPStr4 = Integer.parseInt(IPStrArray[3]); String IPBS=Integer.toBinaryString(IPStr1)+" "+Integer.toBinaryString(IPStr2)+" "+Integer.toBinaryString(IPStr3)+" "+Integer.toBinaryString(IPStr4); return IPBS; } //将127.0.0.1形式的IP地址转换成十进制整数,这里没有进行任何错误处理 public static long IP2Long(String IPStr){ if(!isValidateIP(IPStr)){ throw new RuntimeException("无效的IP地址!"); } long[] ip = new long[4]; String[] IPStrArray = IPStr.split("\\."); int IPStr1 = Integer.parseInt(IPStrArray[0]); int IPStr2 = Integer.parseInt(IPStrArray[1]); int IPStr3 = Integer.parseInt(IPStrArray[2]); int IPStr4 = Integer.parseInt(IPStrArray[3]); //将每个.之间的字符串转换成整型 ip[0] = Long.parseLong(IPStrArray[0]); ip[1] = Long.parseLong(IPStrArray[1]); ip[2] = Long.parseLong(IPStrArray[2]); ip[3] = Long.parseLong(IPStrArray[3]); return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3]; } //将IP地址十进制整数转化成二进制,这里没有进行任何错误处理 public static String Long2Binary(long longIP){ return Long.toBinaryString(longIP); } //将十进制整数形式转换成127.0.0.1形式的ip地址 public static String Long2IP(long longIP){ StringBuffer sb = new StringBuffer(""); //直接右移24位 sb.append(String.valueOf((longIP >>> 24))); sb.append("."); //将高8位置0,然后右移16位 sb.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16)); sb.append("."); //将高16位置0,然后右移8位 sb.append(String.valueOf((longIP & 0x0000FFFF) >>> 8)); sb.append("."); //将高24位置0 sb.append(String.valueOf((longIP & 0x000000FF))); return sb.toString(); } /** * 判断IP地址是否有效? * @param customIP 需要校验的IP地址 * @return 结果 */ public static boolean isValidateIP(String customIP){ //String regex = "^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$"; //String regex = "([1-9]|[1-9]\\d|1\\d{2}|2[0-1]\\d|22[0-3])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"; String regex = "^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(customIP); String val = null; while (m.find()){ val = m.group(); // System.out.println("MATCH: " + val); return true; } if (val == null) { // System.out.println("NO MATCHES: "); return false; } return false; } /** * 校验客户端IP地址是否在有效的地址段内 * @param customIP 客户端IP * @param fromIP1 IP起始段1 * @param toIP1 IP结束段1 * @param fromIP2 IP起始段2 * @param toIP2 IP结束段2 * @param fromIP3 IP起始段3 * @param toIP3 IP结束段3 * @return */ public static boolean isAllowedIP(String customIP,String fromIP1,String toIP1,String fromIP2,String toIP2,String fromIP3,String toIP3){ System.out.println("_customIP is "+customIP); long _customIP = 0; long _fromIP1 = 0; long _toIP1 = 0; long _fromIP2 = 0; long _toIP2 = 0; long _fromIP3 = 0; long _toIP3 = 0; boolean _result = false; //当客户端IP地址是有效的 if(customIP!=null&&isValidateIP(customIP)){ _customIP = IP2Long(customIP); //当第一校验IP地址段有效 if(fromIP1!=null&&toIP1!=null&&isValidateIP(fromIP1)&& isValidateIP(toIP1)){ _fromIP1 = IP2Long(fromIP1); _toIP1 = IP2Long(toIP1); if(_fromIP1<_toIP1){ if(_customIP>=_fromIP1 && _customIP<=_toIP1){ _result = true; } }else{ if(_customIP<=_fromIP1 && _customIP>=_toIP1){ _result = true; } } } //当第二校验IP地址段有效 if(fromIP2!=null&&toIP2!=null&&isValidateIP(fromIP2)&& isValidateIP(toIP2)){ _fromIP2 = IP2Long(fromIP2); _toIP2 = IP2Long(toIP2); if(_fromIP2<_toIP2){ if(_customIP>=_fromIP2 && _customIP<=_toIP2){ _result = true; } }else{ if(_customIP<=_fromIP2 && _customIP>=_toIP2){ _result = true; } } } //当第三校验IP地址段有效 if(fromIP3!=null&&toIP3!=null&&isValidateIP(fromIP3)&& isValidateIP(toIP3)){ _fromIP3 = IP2Long(fromIP3); _toIP3 = IP2Long(toIP3); if(_fromIP3<_toIP3){ if(_customIP>=_fromIP3 && _customIP<=_toIP3){ _result = true; } }else{ if(_customIP<=_fromIP3 && _customIP>=_toIP3){ _result = true; } } } } return _result; } public static void main(String[] args){ String IPStr = "192.9.200.1"; String maskStr = "255.255.255.0"; String IPStrBinary = IPUtil.getIPBinaryString(IPStr); String maskStrBinary = IPUtil.getIPBinaryString(maskStr); System.out.println(IPStrBinary); System.out.println(maskStrBinary); // System.out.println(IPUtil.IP2Long(IPStr)); // System.out.println(IPUtil.IP2Long(maskStr)); // System.out.println(IPUtil.Long2Binary(IPUtil.IP2Long(IPStr))); // System.out.println(IPUtil.Long2Binary(IPUtil.IP2Long(maskStr))); String ip1 = "255.255.255.255"; // System.out.println(IPUtil.IP2Long(ip1)); // System.out.println(IPUtil.Long2Binary(IPUtil.IP2Long(ip1))); // System.out.println(IPUtil.isValidateIP("192.168.72.59")); System.out.println("result is "+IPUtil.isAllowedIP("192.168.72.59", "192.168.72.1", "192.168.72.255", null,null,null,null)); } }
IPUtil
开发者博客:http://www.developsearch.com
猜你喜欢
转载自keepwork.iteye.com/blog/1540008
今日推荐
周排行