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.

[ Hits: 95.579 ]

Por: Fábio Berbert de Paula em 04/11/2002 | Blog: https://mestrefabio.com


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.

Página anterior     Próxima página

Páginas do artigo
   1. Elaborando o script - parte 1
   2. Elaborando o script - parte 2
   3. Elaborando o script - parte final
Outros artigos deste autor

Rodando ASP em servidores web Linux

OpenAI - Como usar uma Inteligência Artificial a seu favor

Semana da velharia no VOL

Como criar VIEWS no MySQL

Criando sites para celular com WML

Leitura recomendada

Alterando quotas via PHP (navegador)

Consultando servidores SNMP com PHP

Montando um velocímetro de internet com PHP e GD

Vulpes - Gerenciamento de acesso para gateways / proxies no Linux

Script PHP/MySQL - Controle de Máquinas via MAC Address no IPtables

  
Comentários
[1] Comentário enviado por arknoid em 29/12/2003 - 17:07h

pô nunca imaginaria que ia ter artigo asism no VOL!
blz cara!

[2] Comentário enviado por reimassupilami em 17/09/2004 - 15:48h

caramba, muito bom hein... faz tempo q uso php e linux, mas nunca tinha pensado em fazer scripts pra administrar a rede... muito interessante...

até me animei, vou pensar em mais coisas q posso fazer assim...

valeu cara...

[3] Comentário enviado por ciclano em 11/10/2004 - 23:29h

Show mesmo. Testei e funcionou. Só que no meu caso precisaria monitorar Hosts que usam o No-IP em outras cidades. Quero dizer, não tem IP Fixo. Como o ip muda todo dia não consegui pois tudo da resposta como online. Como eu poderia fazer ?

[4] Comentário enviado por dh-00 em 25/10/2004 - 10:52h

show, mas agora gostaria de implementar o envio de e-mail? alguem tem esse codigo????

[5] Comentário enviado por filype em 15/05/2005 - 04:53h

pow cara q shoooooooowww eu estava precisando mto disto só tenho mais uma duvida q vou precisar consultar um forum.

[6] Comentário enviado por adrpat em 26/11/2005 - 22:53h

estou iniciando na adm do linux e axei mt bom este artigo. jah vou colocar em pratica. vlw

[7] Comentário enviado por as1978 em 24/04/2006 - 15:37h

Nota 10, sou iniciante e estava procurando um artigo com um exemplo de monitoramento. Simples porém mas muito eficiente, valeu cara!!

[8] Comentário enviado por GuilhermeCunha em 04/07/2007 - 17:06h

Artigo Bom!

Warning: shell_exec(): Cannot execute using backquotes in Safe Mode in /var/www/vhosts/servermob.com/httpdocs/painel2.php on line 18

Outra coisa, um apache com acesso a shell_exec() não seria vulnerável pelo fato de poder executar comandos na shell?
Abraços...

Guilherme.mob@gmail.com

[9] Comentário enviado por robertofonseca em 30/07/2007 - 17:25h

Excelente artigo!!!
Minha contribuição:
} else {
mail("seuemail@seudominio.com.br","SERVIDOR" .$site, "servidor fora do ar");

apos o else, se o servidor estiver fora do ar, ele manda um email para o seu email com o texto servidor fora do ar.

[10] Comentário enviado por agl77 em 15/04/2008 - 15:08h

Fantastico isso. Vai me ser util pra umas experiencias!
vlw

[11] Comentário enviado por comfaa em 28/10/2008 - 13:02h

muito legal !!!

[12] Comentário enviado por enoquemendes em 19/04/2013 - 11:51h

Sei que esse post é meio antigo mas, no caso do windows o comando correto não seria,

$comando = "C:\\windows\\system32\ping -n 1 " . $ip;

[13] Comentário enviado por didaticacg em 01/01/2014 - 16:28h

Painel de Monitoramento de Hosts
google
8.8.8.8
Status:
( ! ) Deprecated: Function ereg() is deprecated in C:\wamp\www\ping 001\index.php on line 22
Call Stack
# Time Memory Function Location
1 0.0004 673944 {main}( ) ..\index.php:0
não responde Serv local
10.100.200.1
Status:
( ! ) Deprecated: Function ereg() is deprecated in C:\wamp\www\ping 001\index.php on line 22
Call Stack
# Time Memory Function Location
1 0.0004 673944 {main}( ) ..\index.php:0
não responde

ta dando esse error amigao como faço pra corrigir o código ta assim

<!-- 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>

<?php
$servidores = array (
"google" => "8.8.8.8",
"Serv local" => "10.100.200.1"
);

while (list($site,$ip) = each($servidores)) {
$comando = "C:\\windows\\system32\ping -n 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 -->

[14] Comentário enviado por biasaneto em 20/07/2016 - 12:41h

Amigo ...muito legal esse script ...mas teria como organizar os hosts monitorados no array para que aparecesse em 4 colunas de 10 hosts cada...


$servidores = array (

"Ag. teste1" => "192.168.0.11",
"Ag. teste2" => "192.168.0.12",
"Ag. teste3" => "192.168.0.13",
"Ag. teste4" => "192.168.0.14",
"Ag. teste5" => "192.168.0.15",
"Ag. teste6" => "192.168.0.16",
"Ag. teste7" => "192.168.0.17",
"Ag. teste8" => "192.168.0.18",
"Ag. teste9" => "192.168.0.19",
"Ag. teste10" => "192.168.0.20",
"Ag. teste11" => "192.168.0.21",
"Ag. teste12" => "192.168.0.22",
"Ag. teste13" => "192.168.0.23",
"Ag. teste14" => "192.168.0.24",
"Ag. teste15" => "192.168.0.25",
"Ag. teste16" => "192.168.0.26",
"Ag. teste17" => "192.168.0.27",
"Ag. teste18" => "192.168.0.28",
"Ag. teste19" => "192.168.0.29",
"Ag. teste20" => "192.168.0.30",
"Ag. teste21" => "192.168.0.31",
"Ag. teste22" => "192.168.0.32",
"Ag. teste23" => "192.168.0.33",
"Ag. teste25" => "192.168.0.34",
"Ag. teste26" => "192.168.0.35",
"Ag. teste27" => "192.168.0.36",
"Ag. teste28" => "192.168.0.37",
"Ag. teste29" => "192.168.0.38",
"Ag. teste30" => "192.168.0.39",


Desde Já agradeço


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts