
30/08/2006 - Pixel Fonts : Encaixe preciso e fácil com Action Script
08/04/2006 - Critérios de armazenamento no Oracle
07/02/2003 - Criando um formulário de contatos com CDONTS
23/08/2003 - Internet vira referência na prestação de serviços
14/01/2005 - Validando um e-mail checando se o domínio existe ou não...
09/01/2003 - Indique
29/01/2003 - Enviando EMAIL com ASP, COLDFUSION E PHP
08/05/2005 - Eficiência e segurança com SQL parametrizado
09/01/2003 - Como simular objetos 3D simples
15/01/2005 - Fazendo uma enquete simples com arquivos texto
22/09/2006 - W3C e Web Standards
08/12/2003 - Introdução a DHTML
21/01/2003 - Fireworks VS Photoshop
25/05/2004 - O que o Google faz que você não sabia....
Leituras: 5785 -
Verificando integridade de servidores POP com PHP/sockets
A linguagem PHP é tão rica que muitas vezes não sabemos o que pode-se extrair de determinados recursos por ela oferecidos. Neste artigo mostro como criar um web-robot que verifica a integridade de servidores POP através de conexões TCP/IP.
Introdução versão imprimível
Esse artigo é uma incrementação do artigo "Criando um painel de rede em PHP", mas desta vez vamos mais à fundo nos recursos da linguagem,utilizando de suas funções de rede para verificar a integridade do servidor a um nível mais detalhado.
Nossa primeira versão do painel apenas verificava se uma máquina estava ativa na rede. Para tornarmos nosso aplicativo mais eficiente, vamos utilizar dos recursos de rede do PHP para verificar se o serviço desejado está ativo ou não. Muitas vezes um servidor passa a negar serviços de rede por algum motivo, mas continua respondendo a pacotes ICMP como se nada tivesse acontecido.
Para demonstrar a funcionalidade do painel, escolhi o serviço POP(Post Office Protocol) como alvo de nosso web-robot, por ser muito comum a queda do mesmo em servidores de rede (1).
(1) isso sem levar em conta as quedas do MS SQL Server quando executado em servidores menos robustos
Elaborando o script - parte 1
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 a lista de servidores que será monitorada:<?
$servidores = array ("pop3.uol.com.br","pop.matrix.com.br","pop.ibest.com.br");
?>;Neste exemplo utilizei endereços de servidores POP de provedores Internet,altere os mesmos para os servidores da sua empresa.
No bloco abaixo temos o coração do aplicativo. Utilizo uma estrutura de looping para percorrer cada máquina do array servidores, abrindo uma conexão TCP na porta 110 (2) com a mesma. Aproveitei do recurso de tabelas do HTML para melhorar a formatação da saída do programa.
(2) por definição, o serviço POP sempre é executado na porta 110 de um servidor<?
while (list($chave,$servidor) = each($servidores)) {
$stream = fsockopen ($servidor, 110, $errono, $errostr, 30);
echo "<td>".$servidor."<br>"."Status:";
if ($stream) {
echo "<b>Ativo</b></td>";
} else {
echo "<font color=red>" . $errostr . "</font></td>";
}
}
?>Na linha:
$stream = fsockopen ($servidor, 110, $errono, $errostr, 30);
A variável $stream armazena a conexão com o servidor em questão. O comando fsockopen se conecta à porta 110 de $servidor, em caso de erro durante a conexão, o número e a descrição do mesmo são respectivamente armazenadas em $errorno e $errorstr. O tempo de espera para a realização de conexão é de 30 segundos.
Seguindo a lógica do programa, se a variável $stream possuir um valor VERDADEIRO, sabemos que o servidor está aceitando conexões, caso contrário,mostramos a mensagem do erro ocorrido na tela.<?
if ($stream) {
echo "<b>Ativo</b></td>";
} else {
echo "<font color=red>" . $errostr . "</font></td>";
}
?>Elaborando o script - parte final
Agora que todas as partes do nosso programa foram explicadas, vamos unificar nossos blocos para formar nosso aplicativo.<!-- painelPOP.php -->
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="60">
</head>
<body>
<h3>Painel de Monitoramento de Servidores de Email</h3>
<table border=1 cellspacing=3>
<tr>
<?
$servidores = array ("pop3.uol.com.br","pop.matrix.com.br");
while (list($chave,$servidor) = each($servidores)) {
$stream = fsockopen ($servidor, 110, $errono, $errostr, 30);
echo "<td>".$servidor."<br>"."Status:";
if ($stream) {
echo "<b>Ativo</b></td>";
} else {
echo "<font color=red>" . $errostr . "</font></td>";
}
}
?>
</tr>
</table>
</body>
</html>
Atenciosamente,
Fábio Berbert de Paula
fabio@vivaolinux.com.br