BuscaPé, líder em comparação de preços na América Latina
Desenvolvimento de sites , portais ,logomarcas e trabalhos gráficos. Downloads de Apostilas de html, , dreamweaver , flash , php , asp ,  programas, scripts asp , php , cgi , javascript , coldfusion e muitos outros

Saiba onde tem o melhor preço antes de comprar

Criando um painel de rede em PHP


Leituras: 7369 -


Elaborando o script - parte 1

A primeira atitude que qualquer administrador de redes toma quando vai verificar a integridade de uma máquina é abrir um terminal e disparar pacotes ICMP com o comando ping contra essa. Está escrito no manual,sempre comece pelos problemas triviais, pois eles são as causas de 99%dos problemas que podem comprometer o funcionamento da rede de sua empresa.

Agora a pergunta, o que pode lhe tornar um profissional diferenciado ? Ora,o fato de você estar apto a identificar uma falha de forma mais rápida que os outros é uma. É aqui que entram os recursos que a programação lhe oferece. A facilidade de iteração com servidores provida por linguagens interpretadas como o PHP é um recurso que não pode ser desperdiçado. Foi seguindo essa linha de raciocínio que resolvi escrever este artigo, onde criaremos um aplicativo usado para monitorar as máquinas de sua rede usando PHP e o comando ping.

O primeiro passo na construção de nosso script será definir um cabeçalho usado para recarregar nosso script de tempos em tempos. Podemos fazer isso usando a tag meta do HTML:

<META HTTP-EQUIV="Refresh" CONTENT="60">

Neste caso, nosso script será recarregado a cada 60 segundos. Em seguida, vamos definir o array que contém informações sobre os nossos servidores.

<?
$servidores = array (
"fabio.vivaolinux.com.br" => "200.215.128.83",
"webmail.vivaolinux.com.br" => "200.215.128.241"
);
?>

Neste exemplo utilizei dois hosts do meu site, substitua-os com sua própria configuração, mantendo o formato original hostname => ip.

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.

Elaborando o script - parte final

Agora que todas as partes do nosso programa foram explicadas, vamos unificar nossos blocos para formar nosso aplicativo.

<!-- painel.php -->
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="60">
</head>
<body>
<h3>Painel de Monitoramento de Hosts</h3>
<table border=1 cellspacing=3>
<tr>
<?
$servidores = array (
"fabio.vivaolinux.com.br" => "200.215.128.83",
"webmail.vivaolinux.com.br" => "200.215.128.241"
);

while (list($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>";
}
}
?>
</tr>
</table>
</body>
</html>
<!-- fim do programa -->

Essa é a versão mais simples possível do nosso painel. Vou deixar a incrementação do programa por sua conta. Que tal adicionar o recurso de avisar o administrador de redes por email quando uma máquina não está respondendo ? E sobre adicionar informações sobre quais serviços cada máquina executa para melhor informar os usuários da rede ? Ah, não podemos esquecer de melhorar este aspecto visual é claro, sou tão bom em design quanto você é em tango.

Atenciosamente,
Fábio Berbert de Paula
fabio@vivaolinux.com.br


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.