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;
}
}
相关文章
- Java设置全局变量_java如何定义全局变量
- java 音频转为wav格式标准音频 | Java工具类
- java工具类-Java对象转换成Map
- protostuff java_Protostuff一键序列化工具、Protobuf JAVA实现
- java 取余 小数_Java小数取余问题求助「建议收藏」
- java传真发送,用Java发送传真解决之道
- Java基础知识点笔记(一):java中的取整与四舍五入
- think in java一_Think in Java(一):Java基础「建议收藏」
- java基础:流程控制篇
- java scanner输入数组_java基础- scanner/方法/数组
- 面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
- js文件上传的几种方式_java执行js文件
- Java转换流_java中的字符使用什么编码
- Java基础-遍历数组
- Java map转实体类_java实体类转json
- Java list foreach_java的foreach
- java类和对象(上.2)
- 【原创】Java基础面试题②
- Java基础--数据类型
- centos7 java -verison Error: Could not create the Java Virtual Machine.
- java 二叉查找树(增删改查操作)详解编程语言
- Java学习笔记之七java函数的语法规则总结详解编程语言
- 解决Java程序连接MySQL数据库的方法(java链接mysql数据库)
- 数据库Java实现Oracle数据库监控(java监听oracle)
- 机制标题:基于Redis的Java过期机制研究(redisjava过期)
- 时间设置Redis Java中键的过期时间(redisjava过期)
- Java学习Linux基础的必要性(java要学linux)
- 让Java桥接Linux新世界的重要性(java链接linux)
- Java实现Linux:跨平台解决方案(java 实现linux)
- Linux测试搭配Java快速实现稳定性验证(linux测试java)
- java对象序列化与反序列化的默认格式和json格式使用示例
- 图解Java线程的生命周期