java 子网掩码和IP计算起始IP和终止IP工具类

作者 : admin 本文共4235个字,预计阅读时间需要11分钟 发布时间: 2024-06-8 共3人阅读

java 子网掩码和IP计算起始IP和终止IP工具类

1.根据掩码位数获取掩码

2.根据ip地址和掩码获取起始IP

3.根据ip地址和掩码获取终止IP

4.ip转换Long

5.实际可用ip数量


public class NetAddressUtils {
/**
* 根据掩码位数获取掩码
*/
public 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);
}
return  array[0] + "." + array[1] + "." + array[2] + "." + array[3];
}
/**
* 根据ip地址和掩码获取起始IP
* @param ipinfo
* @param netMask
* @return
*/
public static 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("
", "");
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;
}
/**
* 根据ip地址和掩码获取终止IP
* @param ipinfo
* @param netMask
* @return
*/
public static 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;
}
/**
* ip转换Long
* @param ip
* @return
*/
public static long ip2long(String ip) {
String[] ips = ip.split("[.]");
if (ips.length != 4 || "".equals(ip)) {
return 0;
} else {
return 16777216L * Long.parseLong(ips[0]) + 65536L
* Long.parseLong(ips[1]) + 256 * Long.parseLong(ips[2])
+ Long.parseLong(ips[3]);
}
}
/**
* 实际可用ip数量
* @param netMask
* @return
*/
public static 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;
}
public static int getNetMaskNumber(String netMask) {
int netMaskNumber = 0;
switch (netMask) {
case "255.255.255.255":
netMaskNumber = 32;
break;
case "255.255.255.254":
netMaskNumber = 31;
break;
case "255.255.255.252":
netMaskNumber = 30;
break;
case "255.255.255.248":
netMaskNumber = 29;
break;
case "255.255.255.240":
netMaskNumber = 28;
break;
case "255.255.255.224":
netMaskNumber = 27;
break;
case "255.255.255.192":
netMaskNumber = 26;
break;
case "255.255.255.128":
netMaskNumber = 25;
break;
case "255.255.255.0":
netMaskNumber = 24;
break;
case "255.255.254.0":
netMaskNumber = 23;
break;
case "255.255.252.0":
netMaskNumber = 22;
break;
case "255.255.248.0":
netMaskNumber = 21;
break;
case "255.255.240.0":
netMaskNumber = 20;
break;
}
return netMaskNumber;
}
//    public static void main(String[] args) throws Exception {
//        /*
//         * 10.197.12.0	255.255.254.0	 10.197.12.1 	10.197.13.254	Used	210
//         * 10.202.123.0	255.255.255.0	10.202.123.1	10.202.123.254	Used	11
//         * 10.194.220.0	255.255.255.224	10.194.220.1	10.194.220.254	Used	22
//         * 10.102.161.0	255.255.255.0	10.102.161.1	10.102.161.254	Used	12
//         */
//        String ip = "10.194.220.0";
//        String netmask = "255.255.255.224";
        String startIp = NetAddressUtils.getLowAddr(ip, netmask);
        String endIp = NetAddressUtils.getHighAddr(ip, netmask);
        System.out.println("start ip: " + startIp);
        System.out.println("end ip: " + endIp);
        System.out.println("amount: " +
                (NetAddressUtils.ip2long(endIp) - NetAddressUtils.ip2long(startIp) + 1));
//
//        int ss = getHostNumber(netmask);
//        System.out.println(ss);
//        String aa  = getNetMask("28");
//        System.out.println(aa);
//    }
}
本站无任何商业行为
个人在线分享-虚灵IT资料分享 » java 子网掩码和IP计算起始IP和终止IP工具类
E-->