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!