JAVA代码根据IP/掩码位数格式地址段得到起始地址和结束地址,可用IP数量,掩码
来源:互联网 发布:君何以知燕王句式 编辑:程序博客网 时间:2024/05/17 07:30
网上根据IP/掩码位数获取起始地址的方法大多是JS代码实现.项目需要在后台进行处理.提供一份根据IP/掩码获取起始地址通过java代码实现
//IP String ip = "192.168.3.0"; //掩码位数 String mask = "24";
1.根据掩码位数获取掩码
/** * 根据掩码位数获取掩码 */ private static String getNetMask(String mask) { int inetMask =Integer.parseInt(mask); if(inetMask > 32){ return null; } //子网掩码为1占了几个字节 int num1 = inetMask/8; //子网掩码的补位位数 int num2 = inetMask%8; int array[] = new int[4]; for (int i = 0; i < num1; i++) { array[i] = 255; } for (int i = num1; i < 4; i++) { array[i] = 0; } for (int i = 0; i < num2; num2--) { array[num1] += Math.pow(2, 8-num2); } String netMask = array[0] + "." + array[1] + "." + array[2] + "." + array[3]; return netMask; }
2.根据ip地址和掩码获取起始IP
private String getLowAddr(String ipinfo, String netMask) { String lowAddr = ""; int ipArray[] = new int[4]; int netMaskArray[] = new int[4]; if(4 != ipinfo.split("\\.").length || "" == netMask){ return null; } for (int i = 0; i < 4; i++) { try{ ipArray[i] = Integer.parseInt(ipinfo.split("\\.")[i]); }catch(NumberFormatException e){ String ip = ipinfo.replaceAll("\n", ""); ipArray[i] = Integer.parseInt(ip.split("\\.")[i]); } netMaskArray[i] = Integer.parseInt(netMask.split("\\.")[i]); if(ipArray[i] > 255 || ipArray[i] < 0 || netMaskArray[i] > 255 || netMaskArray[i] < 0){ return null; } ipArray[i] = ipArray[i]&netMaskArray[i]; } //构造最小地址 for (int i = 0; i < 4; i++){ if(i == 3){ ipArray[i] = ipArray[i] + 1; } if ("" == lowAddr){ lowAddr +=ipArray[i]; } else{ lowAddr += "." + ipArray[i]; } } return lowAddr; }
3.根据ip地址和掩码获取终止IP
private String getHighAddr(String ipinfo, String netMask) { String lowAddr = getLowAddr(ipinfo, netMask); int hostNumber = getHostNumber(netMask); if("" == lowAddr || hostNumber == 0){ return null; } int lowAddrArray[] = new int[4]; for (int i = 0; i < 4; i++) { lowAddrArray[i] = Integer.parseInt(lowAddr.split("\\.")[i]); if(i == 3){ lowAddrArray[i] = lowAddrArray[i] - 1; } } lowAddrArray[3] = lowAddrArray[3] + (hostNumber - 1); if(lowAddrArray[3] >255){ int k = lowAddrArray[3] / 256; lowAddrArray[3] = lowAddrArray[3] % 256; lowAddrArray[2] = lowAddrArray[2] + k; } if(lowAddrArray[2] > 255){ int j = lowAddrArray[2] / 256; lowAddrArray[2] = lowAddrArray[2] % 256; lowAddrArray[1] = lowAddrArray[1] + j; if(lowAddrArray[1] > 255){ int k = lowAddrArray[1] / 256; lowAddrArray[1] = lowAddrArray[1] % 256; lowAddrArray[0] = lowAddrArray[0] + k; } } String highAddr = ""; for(int i = 0; i < 4; i++){ if(i == 3){ lowAddrArray[i] = lowAddrArray[i] - 1; } if("" == highAddr){ highAddr = lowAddrArray[i]+""; }else{ highAddr += "." + lowAddrArray[i]; } } return highAddr; }
4.ip转换Long
private long ip2long(String ip) { String[] ips = ip.split("[.]"); long num = 16777216L * Long.parseLong(ips[0]) + 65536L * Long.parseLong(ips[1]) + 256 * Long.parseLong(ips[2]) + Long.parseLong(ips[3]); return num; }
5.实际可用ip数量
private int getHostNumber(String netMask) { int hostNumber = 0; int netMaskArray[] = new int[4]; for (int i = 0; i < 4 ; i++) { netMaskArray[i] = Integer.parseInt(netMask.split("\\.")[i]); if(netMaskArray[i] < 255){ hostNumber = (int) (Math.pow(256,3-i) * (256 - netMaskArray[i])); break; } } return hostNumber; }
注意:通过上面获取到的开始和结束IP是第一个可用最后一个可用IP,以掩码位数为24位的为例.一个网段0一般为网络地址,255一般为广播地址.
另外:获取的可用IP数量为256是包含网络地址和广播地址的.这一点一定要清楚.
阅读全文
0 0
- JAVA代码根据IP/掩码位数格式地址段得到起始地址和结束地址,可用IP数量,掩码
- 根据ip/掩码格式地址段得到起始地址和结束地址
- 使用php根据起始ip地址和掩码 计算广播地址(网段结束地址)
- ip地址/掩码得到ip范围
- ip格式判断、地址段分析、掩码计算工具类
- Oracle中IP地址和掩码转换成CIDR格式
- ip地址掩码和位数对应关系表、子网掩码、网络地址、主机地址-yellowcong
- linux下 获取本机ip地址和掩码地址
- linux下 获取本机ip地址和掩码地址
- CentOS 修改IP地址 掩码,网关
- 【网络】认识IP地址与掩码
- 根据ip地址和掩码求网络地址,主机号,广播号和主机最大数。。
- 识别有效的IP地址和掩码并进行分类
- 报表优化-------根据IP地址对比起始IP和结束IP找到相应的地域(判断两个IP地址)
- 识别有效的IP地址和掩码并进行分类统计 java
- Java-NowCoder-识别有效的IP地址和掩码并进行分类统计
- jAVA 识别有效的IP地址和掩码并进行分类统计
- ip地址转换(通过ip地址以及掩码获取广播地址)
- MySQL主主数据同步
- 区块链和以太坊用于 JavaScript 和 React 开发
- ActiveMQ——7.Spring-jms的配置
- QTcpSocket和QTcpServer实现聊天小工具
- ArrayList、LinkedList、Vector的区别
- JAVA代码根据IP/掩码位数格式地址段得到起始地址和结束地址,可用IP数量,掩码
- 设计模式六大原则(3):依赖倒置原则
- 文章标题
- android 修改源码framework后如何编译
- STL的string判断为空字符串
- Docker部署(四):Gogs
- AR试妆应用功能演示及操作详细步骤
- SoapUI作为RESTful api请求响应模拟工具的使用方法
- Java序列化对象的一个使用案例-使用Http发送对象