Java基础之java处理ip的工具类
java处理ip的工具类,包括把long类型的Ip转为一般Ip类型、把xx.xx.xx.xx类型的转为long类型、根据掩码位获取掩码、根据ip/掩码位计算IP段的起始IP、根据ip/掩码位计算IP段的终止IP等方法,可以直接使用!
packagecom.hh.test; importjava.util.HashMap; importjava.util.Map; importorg.apache.commons.lang3.StringUtils; /** *IP工具类 * *@authorbl *@emailkutekute00@gmail.com * */ publicclassIPUtils { /** *把long类型的Ip转为一般Ip类型:xx.xx.xx.xx * *@paramip *@return */ publicstaticStringgetIpFromLong(Longip) { Strings1=String.valueOf((ip&4278190080L)/16777216L); Strings2=String.valueOf((ip&16711680L)/65536L); Strings3=String.valueOf((ip&65280L)/256L); Strings4=String.valueOf(ip&255L); returns1+"."+s2+"."+s3+"."+s4; } /** *把xx.xx.xx.xx类型的转为long类型的 * *@paramip *@return */ publicstaticLonggetIpFromString(Stringip) { LongipLong=0L; StringipTemp=ip; ipLong=ipLong*256 +Long.parseLong(ipTemp.substring(0,ipTemp.indexOf("."))); ipTemp=ipTemp.substring(ipTemp.indexOf(".")+1,ipTemp.length()); ipLong=ipLong*256 +Long.parseLong(ipTemp.substring(0,ipTemp.indexOf("."))); ipTemp=ipTemp.substring(ipTemp.indexOf(".")+1,ipTemp.length()); ipLong=ipLong*256 +Long.parseLong(ipTemp.substring(0,ipTemp.indexOf("."))); ipTemp=ipTemp.substring(ipTemp.indexOf(".")+1,ipTemp.length()); ipLong=ipLong*256+Long.parseLong(ipTemp); returnipLong; } /** *根据掩码位获取掩码 * *@parammaskBit * 掩码位数,如"28"、"30" *@return */ publicstaticStringgetMaskByMaskBit(StringmaskBit) { returnStringUtils.isEmpty(maskBit)?"error,maskBitisnull!" :maskBitMap().get(maskBit); } /** *根据ip/掩码位计算IP段的起始IP如IP串218.240.38.69/30 * *@paramip * 给定的IP,如218.240.38.69 *@parammaskBit * 给定的掩码位,如30 *@return起始IP的字符串表示 */ publicstaticStringgetBeginIpStr(Stringip,StringmaskBit) { returngetIpFromLong(getBeginIpLong(ip,maskBit)); } /** *根据ip/掩码位计算IP段的起始IP如IP串218.240.38.69/30 * *@paramip * 给定的IP,如218.240.38.69 *@parammaskBit * 给定的掩码位,如30 *@return起始IP的长整型表示 */ publicstaticLonggetBeginIpLong(Stringip,StringmaskBit) { returngetIpFromString(ip)&getIpFromString(getMaskByMaskBit(maskBit)); } /** *根据ip/掩码位计算IP段的终止IP如IP串218.240.38.69/30 * *@paramip * 给定的IP,如218.240.38.69 *@parammaskBit * 给定的掩码位,如30 *@return终止IP的字符串表示 */ publicstaticStringgetEndIpStr(Stringip,StringmaskBit) { returngetIpFromLong(getEndIpLong(ip,maskBit)); } /** *根据ip/掩码位计算IP段的终止IP如IP串218.240.38.69/30 * *@paramip * 给定的IP,如218.240.38.69 *@parammaskBit * 给定的掩码位,如30 *@return终止IP的长整型表示 */ publicstaticLonggetEndIpLong(Stringip,StringmaskBit) { returngetBeginIpLong(ip,maskBit) +~getIpFromString(getMaskByMaskBit(maskBit)); } /** *根据子网掩码转换为掩码位如255.255.255.252转换为掩码位为30 * *@paramnetmarks *@return */ publicstaticintgetNetMask(Stringnetmarks) { StringBuffersbf; Stringstr; intinetmask=0,count=0; String[]ipList=netmarks.split("\\."); for(intn=0;n<ipList.length;n++) { sbf=toBin(Integer.parseInt(ipList[n])); str=sbf.reverse().toString(); count=0; for(inti=0;i<str.length();i++) { i=str.indexOf('1',i); if(i==-1) { break; } count++; } inetmask+=count; } returninetmask; } /** *计算子网大小 * *@paramnetmask * 掩码位 *@return */ publicstaticintgetPoolMax(intmaskBit) { if(maskBit<=0||maskBit>=32) { return0; } return(int)Math.pow(2,32-maskBit)-2; } privatestaticStringBuffertoBin(intx) { StringBufferresult=newStringBuffer(); result.append(x%2); x/=2; while(x>0) { result.append(x%2); x/=2; } returnresult; } /* *存储着所有的掩码位及对应的掩码key:掩码位value:掩码(x.x.x.x) */ privatestaticMap<String,String>maskBitMap() { Map<String,String>maskBit=newHashMap<String,String>(); maskBit.put("1","128.0.0.0"); maskBit.put("2","192.0.0.0"); maskBit.put("3","224.0.0.0"); maskBit.put("4","240.0.0.0"); maskBit.put("5","248.0.0.0"); maskBit.put("6","252.0.0.0"); maskBit.put("7","254.0.0.0"); maskBit.put("8","255.0.0.0"); maskBit.put("9","255.128.0.0"); maskBit.put("10","255.192.0.0"); maskBit.put("11","255.224.0.0"); maskBit.put("12","255.240.0.0"); maskBit.put("13","255.248.0.0"); maskBit.put("14","255.252.0.0"); maskBit.put("15","255.254.0.0"); maskBit.put("16","255.255.0.0"); maskBit.put("17","255.255.128.0"); maskBit.put("18","255.255.192.0"); maskBit.put("19","255.255.224.0"); maskBit.put("20","255.255.240.0"); maskBit.put("21","255.255.248.0"); maskBit.put("22","255.255.252.0"); maskBit.put("23","255.255.254.0"); maskBit.put("24","255.255.255.0"); maskBit.put("25","255.255.255.128"); maskBit.put("26","255.255.255.192"); maskBit.put("27","255.255.255.224"); maskBit.put("28","255.255.255.240"); maskBit.put("29","255.255.255.248"); maskBit.put("30","255.255.255.252"); maskBit.put("31","255.255.255.254"); maskBit.put("32","255.255.255.255"); returnmaskBit; } /** *根据掩码位获取掩码 * *@parammasks *@return */ @Deprecated publicstaticStringgetMaskByMaskBit(intmasks) { Stringret=""; if(masks==1) ret="128.0.0.0"; elseif(masks==2) ret="192.0.0.0"; elseif(masks==3) ret="224.0.0.0"; elseif(masks==4) ret="240.0.0.0"; elseif(masks==5) ret="248.0.0.0"; elseif(masks==6) ret="252.0.0.0"; elseif(masks==7) ret="254.0.0.0"; elseif(masks==8) ret="255.0.0.0"; elseif(masks==9) ret="255.128.0.0"; elseif(masks==10) ret="255.192.0.0"; elseif(masks==11) ret="255.224.0.0"; elseif(masks==12) ret="255.240.0.0"; elseif(masks==13) ret="255.248.0.0"; elseif(masks==14) ret="255.252.0.0"; elseif(masks==15) ret="255.254.0.0"; elseif(masks==16) ret="255.255.0.0"; elseif(masks==17) ret="255.255.128.0"; elseif(masks==18) ret="255.255.192.0"; elseif(masks==19) ret="255.255.224.0"; elseif(masks==20) ret="255.255.240.0"; elseif(masks==21) ret="255.255.248.0"; elseif(masks==22) ret="255.255.252.0"; elseif(masks==23) ret="255.255.254.0"; elseif(masks==24) ret="255.255.255.0"; elseif(masks==25) ret="255.255.255.128"; elseif(masks==26) ret="255.255.255.192"; elseif(masks==27) ret="255.255.255.224"; elseif(masks==28) ret="255.255.255.240"; elseif(masks==29) ret="255.255.255.248"; elseif(masks==30) ret="255.255.255.252"; elseif(masks==31) ret="255.255.255.254"; elseif(masks==32) ret="255.255.255.255"; returnret; } }