Criando um painel de rede em PHP
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.
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.
Galera sou novo aki no PhpBrasil. Por isso estou tendo algumas dificuldades com este script, vcs podem me ajudar na alteração para pingar em maquinas Windows?
22/05/2009 8:05pm
(~15 anos atrás)
Olá. Preciso, através do PHP, criar uma ferramenta que bloqueie e desbloqueie a internet de alguns IPs. Olhei este artigo e achei interessante, só que com o comando iptables, no meu caso, não está funcionando. Existe alguma restrição do uso da shell_exec para o comando iptables?
15/04/2005 10:23am
(~19 anos atrás)
Uma alternativa Windows!
Pode-se muito facilmente portá-lo para PHP.
http://www.phpbrasil.com/scripts/script.php/id/854
Pode-se muito facilmente portá-lo para PHP.
http://www.phpbrasil.com/scripts/script.php/id/854
19/03/2003 10:07pm
(~22 anos atrás)
Olá Pessoal, achei muito interessando este script do Fábio e pensei em algo diferente usando a sua idéia. Estou tentando fazer isso para identificar problemas com roteadores e assim sendo mudar as tabelas de rotas no Linux.
Eu desenvolvi o script abaixo, mas estou tendo alguns problemas, com a instrução If (ela se comporta de forma diferente quando eu executo pelo browser e direto pelo shell do linux - php arp.php)
Se alguém tiver alguma idéia, agradeço desde já.
Luciano C. dos Reis
Net Maringá Internet
<?php
$gw = "10.1.1.3";
$gw2 = "10.1.1.4";
$ip_rede = "192.168.1.0/24";
$cmd_arp = "/sbin/arp -n " . $gw;
$cmd_delroute = "/sbin/route del -net $ip_rede gw $gw";
$cmd_addroute = "/sbin/route add -net $ip_rede gw $gw2";
$saida = shell_exec($cmd_arp);
echo "$saida" . "<br>";
if ( !ereg("no entry",$saida) ) {
echo "Saindo...";
} else {
echo "Excluindo rota: " . $cmd_delroute . "<br>";
$delroute = shell_exec($cmd_delroute);
echo "Incluindo rota: " . $cmd_addroute . "<br>";
$addroute = shell_exec($cmd_addroute);
}
?>
Eu desenvolvi o script abaixo, mas estou tendo alguns problemas, com a instrução If (ela se comporta de forma diferente quando eu executo pelo browser e direto pelo shell do linux - php arp.php)
Se alguém tiver alguma idéia, agradeço desde já.
Luciano C. dos Reis
Net Maringá Internet
<?php
$gw = "10.1.1.3";
$gw2 = "10.1.1.4";
$ip_rede = "192.168.1.0/24";
$cmd_arp = "/sbin/arp -n " . $gw;
$cmd_delroute = "/sbin/route del -net $ip_rede gw $gw";
$cmd_addroute = "/sbin/route add -net $ip_rede gw $gw2";
$saida = shell_exec($cmd_arp);
echo "$saida" . "<br>";
if ( !ereg("no entry",$saida) ) {
echo "Saindo...";
} else {
echo "Excluindo rota: " . $cmd_delroute . "<br>";
$delroute = shell_exec($cmd_delroute);
echo "Incluindo rota: " . $cmd_addroute . "<br>";
$addroute = shell_exec($cmd_addroute);
}
?>
23/10/2002 8:54am
(~22 anos atrás)
Achei muito interessante seu belo sistema, ocorreu uns problemas mais ja arrumei, gostaria de sabe como eu fasso para descobrir o ip do cara, tipo, se eu abrir um documento limpo, o q devo fazer para que ache o ip do individio?
26/09/2002 4:15pm
(~22 anos atrás)
Eu dei uma incrementada no programa usando tabela para ficar "mais bonitinho", heheh
Tambem mudei um pouco a estrutura de dados.
<?php
function teste ( $ip ) {
exec("ping -q -c 1 $ip",$foo,$res);
return ($res==0);
}
$lista['CDL-BH'] = "cdlnet.com.br";
$lista['roteador'] = "cisco.acip.org.br";
echo "<font face=verdana>";
echo "<center>";
echo "<H3>Checagem geral do sistema</H3>";
echo "<table cellspacing=1 cellpadding=2 style=\"border-style:solid;border-width:1px;border-color:black\">";
foreach ( $lista as $k => $v ) {
$cf = ($i++&1)?"#dddddd":"#ffffff";
echo "<tr bgcolor=$cf><td>".ucfirst($k);
echo "<td>$v</td>";
if ( teste ($v) ) {
echo "<td><font color=green>OK</font>";
} else {
echo "<td><font color=red>Problemas!</font>";
}
echo "</tr>";
};
echo "</table>";
?>
Tambem mudei um pouco a estrutura de dados.
<?php
function teste ( $ip ) {
exec("ping -q -c 1 $ip",$foo,$res);
return ($res==0);
}
$lista['CDL-BH'] = "cdlnet.com.br";
$lista['roteador'] = "cisco.acip.org.br";
echo "<font face=verdana>";
echo "<center>";
echo "<H3>Checagem geral do sistema</H3>";
echo "<table cellspacing=1 cellpadding=2 style=\"border-style:solid;border-width:1px;border-color:black\">";
foreach ( $lista as $k => $v ) {
$cf = ($i++&1)?"#dddddd":"#ffffff";
echo "<tr bgcolor=$cf><td>".ucfirst($k);
echo "<td>$v</td>";
if ( teste ($v) ) {
echo "<td><font color=green>OK</font>";
} else {
echo "<td><font color=red>Problemas!</font>";
}
echo "</tr>";
};
echo "</table>";
?>
13/08/2002 4:21pm
(~22 anos atrás)
Só uma observação:
Esse problema foi solucionado no php 4.2 ;-)
Para resgatar uma variavel passada por URL soh pondo $_GET["comando"];
[]'s
Felipe Lopes
Esse problema foi solucionado no php 4.2 ;-)
Para resgatar uma variavel passada por URL soh pondo $_GET["comando"];
[]'s
Felipe Lopes
05/07/2002 8:43am
(~22 anos atrás)
Marco,
Dê uma lida no complemento desse artigo que é
outro artigo como título: "Verificando integridade de servidores POP com PHP/sockets".
Daí basta você mudar a porta 110 usada no
exemplo do mesmo para a porta 80.
Ixalá !
Fábio Berbert de Paula
fabio@vivaolinux.com.br
www.vivaolinux.com.br
Dê uma lida no complemento desse artigo que é
outro artigo como título: "Verificando integridade de servidores POP com PHP/sockets".
Daí basta você mudar a porta 110 usada no
exemplo do mesmo para a porta 80.
Ixalá !
Fábio Berbert de Paula
fabio@vivaolinux.com.br
www.vivaolinux.com.br
02/07/2002 7:39am
(~22 anos atrás)
Eu fiz uma pequena alteração no script para que este possa dar quebra de linha na tabela e o resultado dos status das maquinas não fiquem em uma única linha ...
<!-- painel.php -->
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="60">
</head>
<body>
<h2>Painel de Monitoramento de Hosts</h2>
<table border=1 cellspacing=3>
<tr>
<?php
$servidores = array (
"fabio.vivaolinux.com.br" => "200.215.128.83",
"webmail.vivaolinux.com.br" => "200.215.128.241"
);
$aux = 0;
while (list($site,$ip) = each($servidores))
{
$comando = "/bin/ping -c 1 " . $ip;
$saida = shell_exec($comando);
if($aux == 5)
{
echo "</tr><tr>";
}
echo "<td>".$site."<br>".$ip."<br>"."Status:";
if ( ereg("bytes from",$saida) ) {
echo "online</td>";
} else {
echo "<font color=red>não responde</font></td>";
}
$aux++;
}
?>
</tr>
</table>
</body>
</html>
<!-- fim do programa -->
<!-- painel.php -->
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="60">
</head>
<body>
<h2>Painel de Monitoramento de Hosts</h2>
<table border=1 cellspacing=3>
<tr>
<?php
$servidores = array (
"fabio.vivaolinux.com.br" => "200.215.128.83",
"webmail.vivaolinux.com.br" => "200.215.128.241"
);
$aux = 0;
while (list($site,$ip) = each($servidores))
{
$comando = "/bin/ping -c 1 " . $ip;
$saida = shell_exec($comando);
if($aux == 5)
{
echo "</tr><tr>";
}
echo "<td>".$site."<br>".$ip."<br>"."Status:";
if ( ereg("bytes from",$saida) ) {
echo "online</td>";
} else {
echo "<font color=red>não responde</font></td>";
}
$aux++;
}
?>
</tr>
</table>
</body>
</html>
<!-- fim do programa -->
02/07/2002 6:59am
(~22 anos atrás)
Eu teste executar uma serie de comandos simples com ls, cp, mv e nenhum deles funciou.
O Motivo de não funcionar é que mesmo que vc passe o conteudo da variavel $comando pela URL (QueryString), quando chegar na linha do comando ping "$comando = "/bin/ping -c 1 " . $ip; " o que vc passou por QueryString vai ser substituido por este...
Sendo assim acho que da para rodar sem preocupações ....
O Motivo de não funcionar é que mesmo que vc passe o conteudo da variavel $comando pela URL (QueryString), quando chegar na linha do comando ping "$comando = "/bin/ping -c 1 " . $ip; " o que vc passou por QueryString vai ser substituido por este...
Sendo assim acho que da para rodar sem preocupações ....
02/07/2002 6:54am
(~22 anos atrás)