0

Verificando integridade de servidores POP com PHP/sockets

criado por Fábio Berbert de Paula em 01/07/2002 2:34pm
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:

<?php
$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 padrão, o serviço POP sempre é executado na porta 110 de um servidor

<?php
while (list($chave,$servidor) = each($servidores)) {
    $stream = fsockopen ($servidor, 110, $errono, $errostr, 30);

    echo "<td>".$servidor."<br>"."Status:";
    if ($stream) {
        echo "Ativo</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.

<?php
    if ($stream) {
        echo "Ativo</td>";
    } else {
        echo "<font color=red>Erro:" . $errostr . "</font></td>";
    }
?>

Comentários:

Mostrando 1 - 6 de 6 comentários
Augusto disse:
Colegas pesquisando e depois me caiu a ficha.

$servidores = array ("udp://127.0.0.1","udp://servidor.com.br");
07/10/2006 9:07am (~17 anos atrás)

Augusto disse:
Verificando, este algoritmo verifica portas TCP mas as UDP não.
Alguem saberia como capturar uma porta UDP ?
07/10/2006 8:53am (~17 anos atrás)

Augusto disse:
O bacana deste codigo é a simplicidade.
Parabéns !
06/10/2006 3:01pm (~17 anos atrás)

Você pode fazer isso com o socket_select...

Vou postar um artigo sobre isso! :)

[]s
27/07/2005 7:01pm (~18 anos atrás)

Só queria elogiar o artigo.
É extremamente simples, o que torna fácil a assimilação. Trabalho com segurança e monitoramento e esse tipo de dica é muito importante quem trabalha com isso.
19/07/2003 9:37pm (~20 anos atrás)

Nilton,

A referência completa de qualquer função PHP
pode ser facilmente encontrada no site PHP.Net.

Veja:

http://www.php.net/manual/en/function.fsockopen.php


Atenciosamente,
Fábio Berbert de Paula
fabio@vivaolinux.com.br
www.vivaolinux.com.br
02/07/2002 7:10am (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)