zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java基础之java处理ip的工具类

2023-06-13 09:15:29 时间

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;
   }
}