JAVA代码根据IP/掩码位数格式地址段得到起始地址和结束地址,可用IP数量,掩码

JAVA代码根据IP/掩码位数格式地址段得到起始地址和结束地址,可用IP数量,掩码

IP地址:

String network ="10.102.90.128/26";

将IP和掩码位数拆分

 String arr[] = network.split("/");
 String ip = arr[0];
 String mask = arr[1];
 int inetMask = Integer.parseInt(mask);
 System.out.println("掩码位数:"+inetMask);

计算子网掩码

  //子网掩码为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];
	 System.out.println("子网掩码:"+netMask);

根据子网掩码获取开始IP

 String lowAddr = "";
 int ipArray[] = new int[4];
 int netMaskArray[] = new int[4];
 if(4 != ip.split("\\.").length || "" == netMask){
     System.out.println(ip.split("\\.").length);
 }
 String ipinfo = ip;
 for (int i = 0; i <4; i++) {
      ipArray[i] = Integer.parseInt(ipinfo.split("\\.")[i]);
      String ipAddr= ipinfo.replaceAll("\n", "");
      ipArray[i] = Integer.parseInt(ipAddr.split("\\.")[i]);
      netMaskArray[i] = Integer.parseInt(netMask.split("\\.")[i]);
      if(ipArray[i] > 255 || ipArray[i] < 0 || netMaskArray[i] > 255 || netMaskArray[i] < 0){
          System.out.println("------");
 	   }
 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];
      }
  }
  System.out.println("开始IP(getWay):"+lowAddr);

IP可用数量(包含广播地址)

		int hostNumber = 0;
        int netMaskArray1[] = new int[4];
        for (int i = 0; i < 4 ; i++) {
            netMaskArray1[i] = Integer.parseInt(netMask.split("\\.")[i]);
            if(netMaskArray1[i] < 255){
                hostNumber =  (int) (Math.pow(256,3-i) * (256 - netMaskArray1[i]));
            }
        }
        System.out.println("IP可用数量(包含广播):"+hostNumber);

根据ip地址和掩码获取结束IP

		if (""==lowAddr||hostNumber==0){
            System.out.println("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];
            }
        }
        System.out.println("结束IP:"+highAddr);

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值