Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Monitorizar SMTP mediante Remote TCP Network Agent
#1
Hola a todos,

Estoy intentando monitorizar el SMTP de un servidor. Lo he configurado tal como indica la documentación. Si lo pongo tal cual con las 2 pipes siempre devuelve 0. En cambio si unicamente dejo el ehlo y el primer 250 me devuelve correctamente.

Alguien lo esta usando con las pipes? existe algun problema para usar las pipes?

Sin usar las pipes no me deja del todo convencido para asegurar al 100% que el servicio esta funcionando correctamente.

Os escribo el codigo que SI que me funciona
TCP ENVIAR :
Code:
ehlo nombreServidor^M

TCP RECIBIR :
Code:
250

Os escribo el codigo que NO funciona.
TCP ENVIAR :
Code:
ehlo nombreServidor^M|MAIL FROM: unCorreo^M| RCPT TO: dosCorreo^M

TCP RECIBIR :
Code:
250|250|250


Gracias por todo.

 Reply
#2
Hola alumbreras,

¿Podrías indicarnos el tipo de datos que has configurado en el módulo que realiza la comunicación TCP? Puede ser que el error esté dando porque el tipo es diferente a lo que está llegando desde el servidor.

Prueba a cambiar a tipo numérico.

Saludos.
 Reply
#3
Hola

El tipo de datos que estoy usando es Remote TCP network agent, boolean data

Lo estoy provando con Numeric Data y no se me inicializa el modulo.

Si lo creo con tipo de datos alfanumerico, únicamente esta retornando la respuesta al ehlo. Las pipe es como si no hiciera caso de ellas. La respuesta del primer ehlo esta devolviendo mas de una linea. Tiene algo que ver esto ?

Gracias por todo

Agustín
 Reply
#4
Buenas Agustín,

Prueba con helo en vez de con ehlo, en este caso te contestará con una sola línea.

Con lo que sea nos comentas. Saludos.
 Reply
#5
Hola Luismi

he cambiado el ehlo por helo y ahora esta devolviendo una linea, pero existe el mismo problema. En el modulo que tengo declarado como alfanumerico, únicamente se ve la respuesta del helo y no se ve la respuesta del MAIL FROM ni del RCPT TO.

De momento la monitorización del smtp la he dejado únicamente con el helo.

Aun tengo la version 3.1. Seria aconsejable pasarse a la 3.2?

Gracias por todo. Cualquier cosa que necesiteis me avisais.
 Reply
#6
Buenas,

Sí que sería aconsejable que actualizaras a la versión 3.2, ya que se corrigen bastantes bugs que había en la anterior versión y se añaden nuevas funcionalidades. Aquí puedes ver los detalles:

http://pandorafms.com/index.php?sec=pand...des&lng=es

Y la descarga de la versión 3.2:

http://sourceforge.net/projects/pandora/...20release/

Saludos.
 Reply
#7
Hola Luismi,

Sobre el tema de monitorizacion de SMTP. He cambiado la manera de hacerlo. Ahora ya no utilizo un modulo remoto utilizando TCP. Sino que he adaptado un script hecho por Michal Ludvig de la pagina web http://www.logix.cz/michal/devel/smtp-cli/

La estructura básica es la misma únicamente no llamo a la funcion de enviar un mail, sino que hago el helo, luego el mail from, el rcpt to y por último el disconnect. Si todo va OK devuelvo un valor correcto y si existe algun error, se devuelve un valor mayor.

Si quereis que os cuelgue el script me avisais.

Muchas gracias por todo. Seguimos en contacto por aqui.
 Reply
#8
Buenas alumbreras,

Si puedes enviárnoslo para tenerlo mejor, te lo agradecemos.

Muchas gracias de antemano.
Saludos y por aquí nos vemos.
 Reply
#9
Hola LuisMi

Te paso el código que he utilizado para monitorizar un servidor smtp.

Este script es una modificación de un script hecho por Michal Ludvig <[email protected]> que podeis encontrar en http://www.logix.cz/michal/devel/smtp-cli/

Code:
#!/usr/bin/perl

my $version = "2.8";

## Require Perl 5.8 or higher -> we need open(.., .., \$variable) construct
require 5.008;

use strict;
use IO::Socket::INET;
use MIME::Base64 qw(encode_base64 decode_base64);
use Getopt::Long;
use Socket qw(:DEFAULT :crlf);

my ($user, $pass, $host, $port, $addr_family,
    $use_login, $use_plain, $use_cram_md5,
    $ehlo_ok, $auth_ok, $starttls_ok, $ssl, $verbose,
    $hello_host, $datasrc,
        $mail_from, $rcpt, @rcpt_to, $from, @to, @cc, @bcc,
    $missing_modules_ok, $missing_modules_count,
    $subject, $body_plain, $body_html, $print_only,
        @attachments, @attachments_inline,
    $sock, $built_message);


$mail_from = '[email protected]';
$rcpt = '[email protected]';
$host = 'servidorcorreo';
$port = 'smtp(25)';
$addr_family = AF_UNSPEC;
$hello_host = 'servidorcorreo';
$verbose = 0;
$use_login = 0;
$use_plain = 0;
$use_cram_md5 = 0;
$starttls_ok = 1;
$ssl = undef;
$auth_ok = 0;
$ehlo_ok = 1;
$missing_modules_ok = 1;
$missing_modules_count = 0;
$print_only = 0;



#### Try to load optional modules

## IO::Socket::SSL and Net::SSLeay are optional
my $have_ssl = eval { require IO::Socket::SSL; require Net::SSLeay; 1; };
if (not $have_ssl and not $missing_modules_ok) {
        warn("!!! IO::Socket::SSL and/or Net::SSLeay modules are not found\n");
        warn("!!! These modules are required for SSL and STARTTLS support\n");
        $missing_modules_count += 2;
}

## IO::Socket::INET6 and Socket6 are optional
my $socket6 = eval { require IO::Socket::INET6; require Socket6; 1; };
if (not $socket6) {
        if ($addr_family == AF_INET6) {
                die("!!! IO::Socket::INET6 and Socket6 modules are not found\nIPv6 support is not available\n");
        }
        if (not $missing_modules_ok) {
                warn("!!! IO::Socket::INET6 -- optional module not found\n");
                warn("!!! Socket6 -- optional module not found\n");
                warn("!!! These modules are required for IPv6 support\n\n");
                $missing_modules_count += 2;
        }
}

## MIME::Lite dependency is optional
my $mime_lite = eval { require MIME::Lite; 1; };
if (not $mime_lite and not $missing_modules_ok) {
        warn("!!! MIME::Lite -- optional module not found\n");
        warn("!!! Used for composing messages from --subject, --body, --attachment, etc.\n\n");
        $missing_modules_count++;
}

## File::Type dependency is optional
my $file_type = eval { require File::Type; File::Type->new(); };
if (not $file_type and not $missing_modules_ok) {
        warn("!!! File::Type -- optional module not found\n");
        warn("!!! Used for guessing MIME types of attachments\n\n");
        $missing_modules_count++;
}

## Term::ReadKey dependency is optional
my $have_term_readkey = eval { require Term::ReadKey; 1; };
if (not $have_term_readkey and not $missing_modules_ok) {
        warn("!!! Term::ReadKey -- optional module not found\n");
        warn("!!! Used for hidden reading SMTP password from the terminal\n\n");
        $missing_modules_count++;
}

my $have_hmac_md5 = eval { require Digest::HMAC_MD5; 1; };
if (not $have_hmac_md5 and not $missing_modules_ok) {
        if ($use_cram_md5) {
                die("!!! CRAM-MD5 authentication is not available because Digest::HMAC_MD5 module is missing\n");
        }
        warn("!!! Digest::HMAC_MD5 -- optional module missing\n");
        warn("!!! Used for CRAM-MD5 authentication method\n");
        $missing_modules_count++;
}

## Advise about --missing-modules-ok parameter
if ($missing_modules_count) {
        warn("!!! Use --missing-modules-ok if you don't need the above listed modules\n");
        warn("!!! and don't want to see this message again.\n\n");
}

## Accept hostname with port number as host:port
if ($host =~ /^(.*):(.*)$/)
{
        $host = $1;
        $port = $2;
}

## Automatically start in SSL mode if port == 465 (SSMTP)
if (not defined($ssl)) {
        $ssl = ($port == 465);
}

# Build the MIME message if required
if (defined($subject) or defined($body_plain) or defined($body_html) or
                @attachments or @attachments_inline) {
        if (not $mime_lite) {
                die("Module MIME::Lite is not available. Unable to build the message, sorry.\n".
                    "Use --data and provide a complete email payload including headers instead.\n");
        }
        if (defined($datasrc)) {
                die("Requested building a message and at the same time used --data parameter.\n".
                    "That's not possible, sorry.\n");
        }
        if (defined($body_plain) and -f $body_plain) {
                local $/=undef;
                open(FILE, $body_plain);
                $body_plain = <FILE>;
                close(FILE);
        }
        if (defined($body_html) and -f $body_html) {
                local $/=undef;
                open(FILE, $body_html);
                $body_html = <FILE>;
                close(FILE);
        }
        my $message = &build_message();

        open(BUILT_MESSAGE, "+>", \$built_message);
        $datasrc = "///built_message";
        if ($print_only) {
                $message->print();
                exit(0);
        } else {
                $message->print(\*BUILT_MESSAGE);
        }
        seek(BUILT_MESSAGE, 0, 0);
}

# Username was given -> enable AUTH
if ($user)
        { $auth_ok = 1; }

# If at least one --auth-* option was given, enable AUTH.
if ($use_login + $use_plain + $use_cram_md5 > 0)
        { $auth_ok = 1; }

# If --enable-auth was given, enable all AUTH methods.
elsif ($auth_ok && ($use_login + $use_plain + $use_cram_md5 == 0))
{
        $use_login = 1;
        $use_plain = 1;
        $use_cram_md5 = 1 if ($have_hmac_md5);
}

# Extract $mail_from address from $from
if (not defined($mail_from) and defined($from)) {
        $mail_from = &find_email_addr($from) or
                die ("The --from string does not contain a valid email address: $from\n");
}

# Extract @rcpt_to list from @to, @cc and @bcc
if (not @rcpt_to) {
        foreach my $rcpt (@to, @cc, @bcc) {
                my $rcpt_addr = &find_email_addr($rcpt);
                if (not defined($rcpt_addr)) {
                        warn("No valid email address found in: $rcpt\n");
                        next;
                }
                push(@rcpt_to, $rcpt_addr);
        }
}

# Exit if user haven't specified username for AUTH.
if ($auth_ok && !defined ($user))
        { die ("SMTP AUTH support requested without --user\n"); }

# Ask for password if it wasn't supplied on the command line.
if ($auth_ok && defined ($user) && !defined ($pass))
{
        if ($have_term_readkey) {
                # Set echo off.
                Term::ReadKey::ReadMode (2);
        } else {
                warn ("Module Term::ReadKey not available - password WILL NOT be hidden!!!\n");
        }
        printf ("Enter password for %[email protected]%s : ", $user, $host);
        $pass = <>;
        if ($have_term_readkey) {
                # Restore echo.
                Term::ReadKey::ReadMode (0);
                printf ("\n");
        }
        exit if (! defined ($pass));
        chop ($pass);
}

# Connect to the SMTP server.
my %connect_args = (
        PeerAddr => $host,
        PeerPort => $port,
        Proto => 'tcp',
        Timeout => 5);

$sock = IO::Socket::INET->new(%connect_args) or die ("34\n");


my ($code, $text);
my (%features);

# Wait for the welcome message of the server.
($code, $text) = &get_line ($sock);
die ("35\n") if ($code != 220);

# Hello! ...
&send_line ($sock, "helo '$hello_host'\n");
($code, $text) = &get_line ($sock);
die ("36\n") if ($code != 250);

# Mail From...
&send_line ($sock, "MAIL FROM : $mail_from\n");
($code, $text) = &get_line ($sock);
die ("37'$code'\n") if ($code != 250);

# Recipient To...
&send_line ($sock, "RCPT TO : $rcpt\n");
($code, $text) = &get_line ($sock);
die ("38\n") if ($code != 250);

# Good bye...
&send_line ($sock, "QUIT\n");
($code, $text) = &get_line ($sock);
die ("39\n") if ($code != 221);

printf ("1\n");

exit 0;


# Get one line of response from the server.
sub get_one_line ($)
{
        my $sock = shift;
        my ($code, $sep, $text) = ($sock->getline() =~ /(\d+)(.)([^\r]*)/);
        my $more;
        $more = ($sep eq "-");
        return ($code, $text, $more);
}

# Get concatenated lines of response from the server.
sub get_line ($)
{
        my $sock = shift;
        my ($code, $text, $more) = &get_one_line ($sock);
        while ($more) {
                my ($code2, $line);
                ($code2, $line, $more) = &get_one_line ($sock);
                $text .= " $line";
                die ("40\n") if ($code ne $code2);
        }
        return ($code, $text);
}

# Send one line back to the server
sub send_line ($@)
{
        my $socket = shift;
        my @args = @_;
        $args[0] =~ s/\n/$CRLF/g;
        $socket->printf (@args);
}
 Reply
#10
Gracias y un saludo.
 Reply


Users browsing this thread: 1 Guest(s)


(c) 2006-2018 Artica Soluciones Tecnológicas. Contents of this wiki are under Create Common Attribution v3 licence. | pandorafms.com | pandorafms.org

Theme © MyBB Themes