Calcular range de ip

1 resposta
robinsonbsilva

Bom dia a todos!
Estou tendo a necessidade de desenvolver uma validação de range de ips a parir de um IP e mascara dada.
Por exemplo, caso seja fornecido o IP 192.168.1.0 e mascara /30 calculando isso eu sei que o numero de hosts
serão 4 e que o range de IP para essa rede seria:

192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3

Bom, até chegar no número de host consegui, o desafio agora é somar na "192.168.1.0" esse número de host, lembrando que cada octeto só pode ir até 255 (255.255.255.255)
Abaixo segue o código que até agora só chegou ao numero de hosts…

String ip = "";
      String mascara = "";
      String binario = "";
      StringTokenizer st = null;

      int primeiroOcto = 0, primeiroOctoIp = 0;
      int segundoOcto = 0, segundoOctoIp = 0;
      int terceiroOcto = 0, terceiroOctoIp = 0;
      int quartoOcto = 0, quartoOctoIp = 0;
      int qtdeZeros = 0;

      HashMap mask = new HashMap();
      mask.put("/20", "255.255.240.0");
      mask.put("/21", "255.255.248.0");
      mask.put("/22", "255.255.252.0");
      mask.put("/23", "255.255.254.0");
      mask.put("/24", "255.255.255.0");
      mask.put("/25", "255.255.255.128");
      mask.put("/26", "255.255.255.192");
      mask.put("/27", "255.255.255.224");
      mask.put("/28", "255.255.255.240");
      mask.put("/29", "255.255.255.248");
      mask.put("/30", "255.255.255.252");

      mascara = (String) mask.get("/30");
      ip = "192.168.1.0";

      st = new StringTokenizer(mascara, ".");
      while (st.hasMoreTokens()) {
         primeiroOcto = Integer.parseInt(st.nextToken());
         segundoOcto = Integer.parseInt(st.nextToken());
         terceiroOcto = Integer.parseInt(st.nextToken());
         quartoOcto = Integer.parseInt(st.nextToken());
      }

      st = new StringTokenizer(ip, ".");
      while (st.hasMoreTokens()) {
         primeiroOctoIp = Integer.parseInt(st.nextToken());
         segundoOctoIp = Integer.parseInt(st.nextToken());
         terceiroOctoIp = Integer.parseInt(st.nextToken());
         quartoOctoIp = Integer.parseInt(st.nextToken());
      }

      binario = Integer.toBinaryString(primeiroOcto);
      binario += Integer.toBinaryString(segundoOcto);
      binario += Integer.toBinaryString(terceiroOcto);

      if (Integer.toBinaryString(quartoOcto).length() == 1 && quartoOcto == 0) {
         binario += Integer.toBinaryString(quartoOcto) + "0000000";
      } else {
         binario += Integer.toBinaryString(quartoOcto);
      }

      for (int i = 0; i < binario.length(); i++) {
         if (binario.charAt(i) == '0') {
            qtdeZeros++;
         }
      }
      

      System.out.println(Math.pow(2, qtdeZeros));
   }

desde já agradeço!

1 Resposta

dfarias

tow com o mesmo problema.

Criado 26 de junho de 2008
Ultima resposta 27 de nov. de 2011
Respostas 1
Participantes 2