I am developing an IP calculator, and now I need to find the first valid IP of the original network entered. I've separated my code into functions, which I think instead of helping, it got in the way. My problem is this: I have a function that displays mask and in this function I have the octets typed and separated (each octet is a string). I have a function that calculates the network ID, however, this function is called out of functions, since I need to pass through the mask parameter and the ip address. The function that displays the mask returns the mask and the function that displays the address returns the address, so I take those values in two variables and step when I call the ID function. Now, in order to calculate the first valid IP, I need the last octet (it is in the mask function), but I also need the mask and address parameters, since the first valid IP is the ID + 1 address (adding this in the last octet). The problem is time to get 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 ID function
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 do 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);