Criando um painel de rede em PHP
Este artigo mostra como criar um painel para monitorar as máquinas de sua rede. O objetivo do aplicativo é identificar quando um ponto de rede deixa de responder, evitando que alguma máquina que rode serviços essenciais fique fora do ar por muito tempo.
Parte 2: Elaborando o script - parte 2
No bloco abaixo temos o coração do aplicativo. Utilizo uma estrutura de looping para percorrer cada máquina do array servidores, executando um ping e imprimindo seu estado na tela. Aproveitei do recurso de tabelas do HTML para melhorar a formatação da saída do programa.
<?
while (lisa($site,$ip) = each($servidores)) {
$comando = "/bin/ping -c 1 " . $ip;
$saida = shell_exec($comando);
echo "<td>".$site."<br>".$ip."<br>"."Status:";
if ( ereg("bytes from",$saida) ) {
echo "<b>online</b></td>";
} else {
echo "<font color=red><b>não responde</b></font></td>";
}
}
?>
Note que o comando ping acima está no formato padrão de servidores *unix*. Se você pretende executar este script numa máquina que roda Windows, pode substituir essa linha por:
$comando = "C:\\windows\\ping -n 1 " . $ip;
Outra particularidade foi a expressão regular utilizada para verificar se o host está ativo. No Linux, a resposta ao comando ping é algo parecido com:
64 bytes from 200.215.128.83: icmp_seq=0 ttl=255 time=0.3 ms
Logo, se o valor da variável $saida capturada pelo comando shell_exec contivera expressão "bytes from", sabemos que o host está ativo.
ereg("bytes from",$saida)
Altere essa expressão regular de acordo com a saída do comando ping do seu sistema operacional. No Windows em Português, a saída é parecida com:
Resposta de 200.215.129.6:bytes=32 tempo=1ms Tempo de vida=254
Logo podemos definir uma expressão regular que combine com "Resposta de", por exemplo. Os parâmetros "-n 1" ou "-c 1" dizem ao ping para enviar apenas 1 (um) pacote ICMP para a máquina-alvo. Se você não definir um limite de pacotes enviados, seu script pode ficarem loop enquanto espera pelo retorno do comando.
$comando = "C:\\windows\\ping -n 1 " . $ip;
Outra particularidade foi a expressão regular utilizada para verificar se o host está ativo. No Linux, a resposta ao comando ping é algo parecido com:
64 bytes from 200.215.128.83: icmp_seq=0 ttl=255 time=0.3 ms
Logo, se o valor da variável $saida capturada pelo comando shell_exec contivera expressão "bytes from", sabemos que o host está ativo.
ereg("bytes from",$saida)
Altere essa expressão regular de acordo com a saída do comando ping do seu sistema operacional. No Windows em Português, a saída é parecida com:
Resposta de 200.215.129.6:bytes=32 tempo=1ms Tempo de vida=254
Logo podemos definir uma expressão regular que combine com "Resposta de", por exemplo. Os parâmetros "-n 1" ou "-c 1" dizem ao ping para enviar apenas 1 (um) pacote ICMP para a máquina-alvo. Se você não definir um limite de pacotes enviados, seu script pode ficarem loop enquanto espera pelo retorno do comando.
blz cara!