Nenhum produto encontrado nessa seleção.
Se você precisa de uma classe PHP para cálculo de máscara de sub-rede IPv4, talvez este artigo irá ajudá-lo a concluir seu projeto. A classe precisa receber um endereço IP com o prefixo CIDR (ex. 192.168.0.1/24) para retornar o restante dos valores de configuração da rede para você.
Os valores retornados serão: Endereço/Prefixo CIDR, Endereço IP, Prefixo CIDR, Máscara de sub-rede, IP da Rede, Broadcast da Rede, Primeiro Host, Último Host, número total de IPs e o número total de hosts.
Por exemplo: Para o IP 172.16.5.10/30, os valores retornados estão abaixo.
Endereço/Rede: 172.16.5.10/30 Endereço: 172.16.5.10 Prefixo CIDR: /30 Máscara de sub-rede: 255.255.255.252 IP da Rede: 172.16.5.8/30 Broadcast da Rede: 172.16.5.11 Primeiro Host: 172.16.5.9 Último Host: 172.16.5.10 Total de IPs: 4 Hosts: 2
Você pode fazer um teste da classe no link abaixo:
Agora vamos aos códigos.
A classe
<?php /** * calc_ipv4 - Cálculo de máscara de sub-rede IPv4 */ class calc_ipv4 { // O endereço IP public $endereco; // O cidr public $cidr; // O endereço IP public $endereco_completo; /** * O construtor apenas configura as propriedades da classe */ public function __construct( $endereco_completo ) { $this->endereco_completo = $endereco_completo; $this->valida_endereco(); } /** * Valida o endereço IPv4 */ public function valida_endereco() { // Expressão regular $regexp = '/^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$/'; // Verifica o IP/CIDR if ( ! preg_match( $regexp, $this->endereco_completo ) ) { return false; } // Separa o IP do prefixo CIDR $endereco = explode( '/', $this->endereco_completo ); // CIDR $this->cidr = (int) $endereco[1]; // Endereço IPv4 $this->endereco = $endereco[0]; // Verifica o prefixo if ( $this->cidr > 32 ) { return false; } // Faz um loop e verifica cada número do IP foreach( explode( '.', $this->endereco ) as $numero ) { // Garante que é um número $numero = (int) $numero; // Não pode ser maior que 255 nem menor que 0 if ( $numero > 255 || $numero < 0 ) { return false; } } // IP "válido" (correto) return true; } /* Retorna o endereço IPv4/CIDR */ public function endereco_completo() { return ( $this->endereco_completo ); } /* Retorna o endereço IPv4 */ public function endereco() { return ( $this->endereco ); } /* Retorna o prefixo CIDR */ public function cidr() { return ( $this->cidr ); } /* Retorna a máscara de sub-rede */ public function mascara() { if ( $this->cidr() == 0 ) { return '0.0.0.0'; } return ( long2ip( ip2long("255.255.255.255") << ( 32 - $this->cidr ) ) ); } /* Retorna a rede na qual o IP está */ public function rede() { if ( $this->cidr() == 0 ) { return '0.0.0.0'; } return ( long2ip( ( ip2long( $this->endereco ) ) & ( ip2long( $this->mascara() ) ) ) ); } /* Retorna o IP de broadcast da rede */ public function broadcast() { if ( $this->cidr() == 0 ) { return '255.255.255.255'; } return ( long2ip( ip2long($this->rede() ) | ( ~ ( ip2long( $this->mascara() ) ) ) ) ); } /* Retorna o número total de IPs (com a rede e o broadcast) */ public function total_ips() { return( pow(2, ( 32 - $this->cidr() ) ) ); } /* Retorna os número de IPs que podem ser utilizados na rede */ public function ips_rede() { if ( $this->cidr() == 32 ) { return 0; } elseif ( $this->cidr() == 31 ) { return 0; } return( abs( $this->total_ips() - 2 ) ); } /* Retorna os número de IPs que podem ser utilizados na rede */ public function primeiro_ip() { if ( $this->cidr() == 32 ) { return null; } elseif ( $this->cidr() == 31 ) { return null; } elseif ( $this->cidr() == 0 ) { return '0.0.0.1'; } return ( long2ip( ip2long( $this->rede() ) | 1 ) ); } /* Retorna os número de IPs que podem ser utilizados na rede */ public function ultimo_ip() { if ( $this->cidr() == 32 ) { return null; } elseif ( $this->cidr() == 31 ) { return null; } return ( long2ip( ip2long( $this->rede() ) | ( ( ~ ( ip2long( $this->mascara() ) ) ) - 1 ) ) ); } }
Todos os métodos são públicos, ou seja, você pode utilizar qualquer um deles individualmente.
Utilização da classe
Para utilizar a classe, é recomendado que você utilize primeiro o método de validação do IP, veja um exemplo:
<?php // Inclui a classe include 'classes/class_calc_ipv4.php'; // Cria o objeto da classe já recebendo o IP/CIDR $ip = new calc_ipv4('192.168.0.5/29'); // Checa se o IP é válido if( $ip->valida_endereco() ) { // Utiliza os métodos disponíveis echo "<b>Endereço/Rede: </b>" . $ip->endereco_completo() . '<br>'; echo "<b>Endereço: </b>" . $ip->endereco() . '<br>'; echo "<b>Prefixo CIDR: </b>/" . $ip->cidr() . '<br>'; echo "<b>Máscara de sub-rede: </b>" . $ip->mascara() . '<br>'; echo "<b>IP da Rede: </b>" . $ip->rede() . '/' . $ip->cidr() . '<br>'; echo "<b>Broadcast da Rede: </b>" . $ip->broadcast() . '<br>'; echo "<b>Primeiro Host: </b>" . $ip->primeiro_ip() . '<br>'; echo "<b>Último Host: </b>" . $ip->ultimo_ip() . '<br>'; echo "<b>Total de IPs: </b>" . $ip->total_ips() . '<br>'; echo "<b>Hosts: </b>" . $ip->ips_rede(); echo "</pre>"; } else { echo 'Endereço IPv4 inválido!'; } ?>
Simples assim!
Download
Você pode baixar o exemplo criado nesse artigo no link abaixo:
Qualquer dúvida é só perguntar aí nos comentários.