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.

[ Hits: 18.558 ]

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


Introdução



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

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Baixar posts do Instagram usando Python

Utilizando o Buffer de Gravação no Editor Vim

A função DATE_FORMAT() do MySQL

Tradutor de palavras em vários idiomas via shell

Resumo do VOL DAY I

Leitura recomendada

Asterisk - Monitorando ligações gravadas através de página em PHP

Alterando quotas via PHP (navegador)

Montando um velocímetro de internet com PHP e GD

Criando um painel de rede em PHP

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

  
Comentários
[1] Comentário enviado por hackwiz em 23/08/2003 - 12:14h

Interessante


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts