1
I’m developing an IP calculator, and now I need to find the first valid IP of the original typed network. I separated my code into functions, which I think instead of helping, it got in the way. My problem is the following: I have a function that displays mask and in this function I have the octets typed and separated (each Octeto is a string). I have a function that calculates the network ID, however, this function is called outside the functions, because I need to pass the mask and the ip address by parameter. The function that displays the mask returns the mask and the function that displays the address returns the address, so I take these values in two variables and step when I call the ID function. Now, to calculate the first valid IP, I need the last Octeto (is in the mask function), but I also need the mask and address parameters, because the first valid IP is the ID + 1 address (adding this in the last Octeto). The problem is time to pick up these values, since the octets are in the mask function.
My mask function
function exibe_mascara() { //função pra exibir informações da máscara original da rede
$mascara_bin = array("", "", "", ""); //array pra máscara em binário
$conta_octeto = 0; //variável para contar os octetos da máscara
$conta_bit = 0; // variável pra contar os bits da máscara
$stringMascaraBin = null; //inicializa a variavel de string da mascara binario
if ($_POST["mascara"] >= 8 && $_POST["mascara"] <= 30 || valida_mascara_decimal()) { //condição pra validar o que o cara digitou
if ($_POST["mascara"] >= 8 && $_POST["mascara"] <= 30) { //condição p testar se a máscara está em notação CIDR
for ($j = 0; $j < $_POST["mascara"]; $j++) { //laço para acrescentar "1" na máscara de acordo com a máscara CIDR
$mascara_bin[$conta_octeto] = $mascara_bin[$conta_octeto] . "1";
$conta_bit++;
if ($conta_bit == 8 || $conta_bit == 16 || $conta_bit == 24) {//condição pra incrementar o octeto
$conta_octeto++;
}
}
$limite = 32 - $_POST["mascara"]; //conta pra saber quantos bits sobraram pra host
for ($i = 0; $i < $limite; $i++) { //laço para acrescentar os bits de host, os zero's.
$mascara_bin[$conta_octeto] = $mascara_bin[$conta_octeto] . "0";
$conta_bit++;
if ($conta_bit == 8 || $conta_bit == 16 || $conta_bit == 24) {//condição pra incrementar o octeto
$conta_octeto++;
}
}
echo"<br>";
echo"Máscara em binário: ";
for ($i = 0; $i < count($mascara_bin); $i++) {//exibir a máscara em binário
echo $mascara_bin[$i];
}
echo"<br>";
echo"Máscara em notação CIDR: /" . $_POST["mascara"] . "<br>";
echo"Máscara em decimal: ";
$mascara_decimal = array("", "", "", ""); //array pra máscara em decimal
for ($i = 0; $i < 4; $i++) {//laço pra exibir a máscara em decimal
echo bindec($mascara_bin[$i]);
$mascara_decimal[$i] = bindec($mascara_bin[$i]);
if ($i < 3) {
echo".";
}
}
//separa os octetos em arrays
$octeto1 = str_split($mascara_bin[0]);
$octeto2 = str_split($mascara_bin[1]);
$octeto3 = str_split($mascara_bin[2]);
$octeto4 = str_split($mascara_bin[3]);
//chamada da função wildcard
echo "<br> Wildcard binário: ";
$octeto1_wil = wildcard($octeto1);
echo ".";
$octeto2_wil = wildcard($octeto2);
echo ".";
$octeto3_wil = wildcard($octeto3);
echo ".";
$octeto4_wil = wildcard($octeto4);
echo "<br>";
//inicializando as strings para os octetos
$stringArrayF1 = null;
$stringArrayF2 = null;
$stringArrayF3 = null;
$stringArrayF4 = null;
//transformando os arrays de octetos wildcard em strings
foreach ($octeto1_wil as $stringArray1) {
$stringArrayF1 = $stringArrayF1 . $stringArray1;
}
foreach ($octeto2_wil as $stringArray2) {
$stringArrayF2 = $stringArrayF2 . $stringArray2;
}
foreach ($octeto3_wil as $stringArray3) {
$stringArrayF3 = $stringArrayF3 . $stringArray3;
}
foreach ($octeto4_wil as $stringArray4) {
$stringArrayF4 = $stringArrayF4 . $stringArray4;
}
$aux = 0; //variável pra mudar a posição do vetor endereço
$endereco_ip = explode(".", $_POST["endereco"]); //tirar os pontos do endereço digitado
echo "Endereço de Broadcast: ";
//chamada da função de broadcast
broadcast($stringArrayF1, $endereco_ip, $aux);
$aux++;
broadcast($stringArrayF2, $endereco_ip, $aux);
$aux++;
broadcast($stringArrayF3, $endereco_ip, $aux);
$aux++;
$ultimo_octeto = broadcast($stringArrayF4, $endereco_ip, $aux); //armazena o ultimo octeto de broadcast numa variavel
echo "<br>Último IP válido: ";
$aux = 0;
//chamada da função de ultimo ip valido
UltimoIpValido($stringArrayF1, $endereco_ip, $aux, $ultimo_octeto);
$aux++;
UltimoIpValido($stringArrayF2, $endereco_ip, $aux, $ultimo_octeto);
$aux++;
UltimoIpValido($stringArrayF3, $endereco_ip, $aux, $ultimo_octeto);
$aux++;
UltimoIpValido($stringArrayF4, $endereco_ip, $aux, $ultimo_octeto);
foreach ($mascara_bin as $stringMascara) { //transforma em string o array de mascara binario
$stringMascaraBin = $stringMascaraBin . $stringMascara;
}
return $stringMascaraBin; //retorna a string da mascara em binario
}
if (valida_mascara_decimal()) { //chama a função de validar pra saber se está no formato correto
$mascara_decimal = array("", "", "", ""); //array pra mascara em decimal
$mascara_decimal = explode(".", $_POST["mascara"]); //adicionando a máscara digitada ao array de mascara decimal sem os pontos
$mascara_binario = array("", "", "", ""); //cria array pra mascara em binario
echo "Máscara em decimal: ";
echo $_POST["mascara"] . "<br>"; //exibe a mascara em decimal
echo "Máscara em binário: ";
for ($i = 0; $i < 4; $i++) {//laço pra transformar de decimal pra binario e armazenar no array mascara binario
$mascara_binario[$i] = str_pad(decbin($mascara_decimal[$i]), 8, "0", STR_PAD_LEFT); //transforma a posição i da mascara em decimal em binario e armazena na posição i da mascara em binário e adiciona 0 a esquerda caso o numero em binario n tenha preenchido bits
if ($i < 4 && $i > 0) {
echo"."; //coloca os pontos nos octetos
}
echo $mascara_binario[$i]; //exibe a mascara binario
}
//separa os octetos em arrays
$octeto1 = str_split($mascara_binario[0]);
$octeto2 = str_split($mascara_binario[1]);
$octeto3 = str_split($mascara_binario[2]);
$octeto4 = str_split($mascara_binario[3]);
//chama função pra saber quais bits estão setados
$bit_setado_octeto1 = verificarBit($octeto1);
$bit_setado_octeto2 = verificarBit($octeto2);
$bit_setado_octeto3 = verificarBit($octeto3);
$bit_setado_octeto4 = verificarBit($octeto4);
//chama a função wildcard e adiciona o retorno numa variável
echo "<br> Wildcard binário: ";
$octeto1_wil = wildcard($octeto1);
echo ".";
$octeto2_wil = wildcard($octeto2);
echo ".";
$octeto3_wil = wildcard($octeto3);
echo ".";
$octeto4_wil = wildcard($octeto4);
//inicializa as strings com null
$stringArrayF1 = null;
$stringArrayF2 = null;
$stringArrayF3 = null;
$stringArrayF4 = null;
//transforma os arrays dos octetos em strings
foreach ($octeto1_wil as $stringArray1) {
$stringArrayF1 = $stringArrayF1 . $stringArray1;
}
foreach ($octeto2_wil as $stringArray2) {
$stringArrayF2 = $stringArrayF2 . $stringArray2;
}
foreach ($octeto3_wil as $stringArray3) {
$stringArrayF3 = $stringArrayF3 . $stringArray3;
}
foreach ($octeto4_wil as $stringArray4) {
$stringArrayF4 = $stringArrayF4 . $stringArray4;
}
echo "<br>";
$aux = 0;
$endereco_ip = explode(".", $_POST["endereco"]); //armazena na variavel endereço ip o que foi digitado pra usar na função broadcast
echo "Endereço de Broadcast: ";
//chama a função broadcast passando os parâmetros pedidos
broadcast($stringArrayF1, $endereco_ip, $aux);
$aux++;
broadcast($stringArrayF2, $endereco_ip, $aux);
$aux++;
broadcast($stringArrayF3, $endereco_ip, $aux);
$aux++;
$ultimo_octeto = broadcast($stringArrayF4, $endereco_ip, $aux); //armazena o último octeto em broadcast numa variavel ultimo octeto
echo "<br>Último IP válido: ";
//chama a função de ultimo ip valido
$aux = 0;
UltimoIpValido($stringArrayF1, $endereco_ip, $aux, $ultimo_octeto);
$aux++;
UltimoIpValido($stringArrayF2, $endereco_ip, $aux, $ultimo_octeto);
$aux++;
UltimoIpValido($stringArrayF3, $endereco_ip, $aux, $ultimo_octeto);
$aux++;
UltimoIpValido($stringArrayF4, $endereco_ip, $aux, $ultimo_octeto);
//soma a quantidade de bit setado de cada octeto pra mostrar a mascara em notação CIDR
$cidr = $bit_setado_octeto1 + $bit_setado_octeto2 + $bit_setado_octeto3 + $bit_setado_octeto4;
echo "<br>Máscara em notação CIDR: " . $cidr;
foreach ($mascara_binario as $stringMascara) { //transforma em string o array de mascara binario
$stringMascaraBin = $stringMascaraBin . $stringMascara;
}
return $stringMascaraBin; //retorna a string da mascara em binario
}
} else {
echo "Formato de máscara inválido!";
}
}
The function of ID
function id_rede_original($ip_bin, $mascara_bin) {
echo "ID rede original em decimal: ";
$id_original = $ip_bin & $mascara_bin;
$decimal_id = long2ip(bindec($id_original));
echo $decimal_id;
echo "<br>";
echo "ID rede original em binário: ";
echo $id_original;
}
and where I call the ID function and the mask
if ($metodo == "POST") {
if (isset($_POST["calcula"])) {
if (valida_endereco()) {
$endereco_original_binario = exibe_endereco();
echo "<br>";
?>
<hr>
<?php
$mascara_original_binario = exibe_mascara();
echo"<br>";
classe();
echo"<br>";
id_rede_original($endereco_original_binario, $mascara_original_binario);