Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche d'une string dans un fichier

5 réponses
Avatar
Olivier Exbrayat
Salut,

J'ai besoin de modifier l'antivirus de mail amavis. Je veux qu'il m'envoie
uniquement les alertes lorsque l'ip de l'émetteur correspond à un réseau
donné. Surement trés facile en perl mais je n'en connais pas assez snifff

Exemple d'header à tester :
Received: from mail.paradis.org ([10.100.2.2])
Received: from mic1.paradis.org ([10.200.2.11])

Je voudrais qu'il m'envoie une alerte s'il trouve dans les headers un
"receveid from" du réseau ([10.*.*.*]) sans tenir compte de la ligne
([10.100.2.2]) (c'est mon serveur relai de mail et tous les mails passent
donc par la !) .

Merci pour tout exemple de code

Olivier

Voici le code original :
#
# Notify admin
sub warn_admin() {
my $output = shift;
open(MAIL, "|$sendmail_wrapper $sendmail_wrapper_args -f$mailfrom") ||
do_exit($REGERR, __LINE__);
$SENDER = "(empty address)" if ($SENDER eq "<>");
print MAIL <<"EOF";
From: $mailfrom
To: $mailto
Subject: FOUND VIRUS IN MAIL from $SENDER
print MAIL <<"EOF";
Here are the headers:
------------------------- BEGIN HEADERS -----------------------------
EOF
$entity->print_header(\*MAIL);
print MAIL <<"EOF";
-------------------------- END HEADERS ------------------------------
EOF
close(MAIL);
}

5 réponses

Avatar
Luc Martineau
Olivier Exbrayat wrote:
Salut,

J'ai besoin de modifier l'antivirus de mail amavis. Je veux qu'il m'envoie
uniquement les alertes lorsque l'ip de l'émetteur correspond à un réseau
donné. Surement trés facile en perl mais je n'en connais pas assez snifff

Exemple d'header à tester :
Received: from mail.paradis.org ([10.100.2.2])
Received: from mic1.paradis.org ([10.200.2.11])

Je voudrais qu'il m'envoie une alerte s'il trouve dans les headers un
"receveid from" du réseau ([10.*.*.*]) sans tenir compte de la ligne
([10.100.2.2]) (c'est mon serveur relai de mail et tous les mails passent
donc par la !) .

Merci pour tout exemple de code

Olivier

Voici le code original :
#
# Notify admin
sub warn_admin() {
my $output = shift;
open(MAIL, "|$sendmail_wrapper $sendmail_wrapper_args -f$mailfrom") ||
do_exit($REGERR, __LINE__);
$SENDER = "(empty address)" if ($SENDER eq "<>");
print MAIL <<"EOF";
From: $mailfrom
To: $mailto
Subject: FOUND VIRUS IN MAIL from $SENDER
print MAIL <<"EOF";
Here are the headers:
------------------------- BEGIN HEADERS -----------------------------
EOF
$entity->print_header(*MAIL);
print MAIL <<"EOF";
-------------------------- END HEADERS ------------------------------
EOF
close(MAIL);
}




Bonjour,

Je ne suis pas un pro de perl. Je débute avec ce langage.

Voici ce que j'aurais tendance à faire:

if( $mailfrom =~ m/Received: from * ([10.(d+).(d+).(d+)])/ ) {
if( $1 != 100 && $2 != 2 && $3 != 2 ) {
alerter_olivier ( "10.$1.$2.$3" );
}
}

En sopposant que $mailfrom contienne l'entête "Received: from..."

Faut bien sûr créer la fonction alerter_olivier...

Si je suis dans le champs, que l'on me flagelle et explique pourquoi.

Au revoir.
Luc

Avatar
Olivier Exbrayat
Merci pour ton aide c'est trés proche du résultat, il faut juste que je
trouve comment accéder aux entêtes du messages.

La ligne qui affiche les headers du message
"$entity->print_header(*MAIL);" n'est pas trés clair je ne retrouve pas la
déclaration de print_header dans le source !!!






"Luc Martineau" a écrit dans le message de
news:ozmSb.42139$


Olivier Exbrayat wrote:
Salut,

J'ai besoin de modifier l'antivirus de mail amavis. Je veux qu'il
m'envoie


uniquement les alertes lorsque l'ip de l'émetteur correspond à un
réseau


donné. Surement trés facile en perl mais je n'en connais pas assez
snifff



Exemple d'header à tester :
Received: from mail.paradis.org ([10.100.2.2])
Received: from mic1.paradis.org ([10.200.2.11])

Je voudrais qu'il m'envoie une alerte s'il trouve dans les headers un
"receveid from" du réseau ([10.*.*.*]) sans tenir compte de la ligne
([10.100.2.2]) (c'est mon serveur relai de mail et tous les mails
passent


donc par la !) .

Merci pour tout exemple de code

Olivier

Voici le code original :
#
# Notify admin
sub warn_admin() {
my $output = shift;
open(MAIL, "|$sendmail_wrapper $sendmail_wrapper_args -f$mailfrom") ||
do_exit($REGERR, __LINE__);
$SENDER = "(empty address)" if ($SENDER eq "<>");
print MAIL <<"EOF";
From: $mailfrom
To: $mailto
Subject: FOUND VIRUS IN MAIL from $SENDER
print MAIL <<"EOF";
Here are the headers:
------------------------- BEGIN HEADERS -----------------------------
EOF
$entity->print_header(*MAIL);
print MAIL <<"EOF";
-------------------------- END HEADERS ------------------------------
EOF
close(MAIL);
}




Bonjour,

Je ne suis pas un pro de perl. Je débute avec ce langage.

Voici ce que j'aurais tendance à faire:

if( $mailfrom =~ m/Received: from * ([10.(d+).(d+).(d+)])/ ) {
if( $1 != 100 && $2 != 2 && $3 != 2 ) {
alerter_olivier ( "10.$1.$2.$3" );
}
}

En sopposant que $mailfrom contienne l'entête "Received: from..."

Faut bien sûr créer la fonction alerter_olivier...

Si je suis dans le champs, que l'on me flagelle et explique pourquoi.

Au revoir.
Luc




Avatar
dominix
Olivier Exbrayat wrote:
Merci pour ton aide c'est trés proche du résultat, il faut juste que
je trouve comment accéder aux entêtes du messages.



Email::Simple fait cela très bien.

Maintenant, s'il vous plait.
1) postez a l'endroit = mettez le texte ajouté APRES celui du posteur
précédent
2) ne citez PAS le message précédent au complet si ce nést pas utile

merci de respecter ces règles élémentaire de bienséance.

--
dominix

Avatar
Olivier Exbrayat
Voici le style de solution que j'ai trouvé pour mon probleme. Le code n'est
surement pas trés élégant mais ca roule.

#
# Notify admin
sub warn_admin() {

# Sélection du destinataire selon l'adresse interne
my $sendwarn ="false";

# Boucle sur les entetes "Received" du mail
for (my $i = 0; $i < $entity->head()->count ( "Received") ; $i++) {
my $received = $entity->head()->get( "Received", $i );
# Test si la ligne contient une adresse ip du stype 10.x.x.x
if ( $received =~ /^from.+([10..{1,3}..{1,3}..{1,3}].+/ ) {
$sendwarn = 'true';
}
}

# Test si envoi du mail
if ( $sendwarn == 'true' ) {
../..


Merci pour vos aides et à bientot.

Olivier

"Olivier Exbrayat" a écrit dans le message de
news:bvc11p$3eo$
Salut,

J'ai besoin de modifier l'antivirus de mail amavis. Je veux qu'il m'envoie
uniquement les alertes lorsque l'ip de l'émetteur correspond à un réseau
donné. Surement trés facile en perl mais je n'en connais pas assez snifff

Exemple d'header à tester :
Received: from mail.paradis.org ([10.100.2.2])
Received: from mic1.paradis.org ([10.200.2.11])

Je voudrais qu'il m'envoie une alerte s'il trouve dans les headers un
"receveid from" du réseau ([10.*.*.*]) sans tenir compte de la ligne
([10.100.2.2]) (c'est mon serveur relai de mail et tous les mails passent
donc par la !) .

Merci pour tout exemple de code

Olivier

Voici le code original :
#
# Notify admin
sub warn_admin() {
my $output = shift;
open(MAIL, "|$sendmail_wrapper $sendmail_wrapper_args -f$mailfrom") ||
do_exit($REGERR, __LINE__);
$SENDER = "(empty address)" if ($SENDER eq "<>");
print MAIL <<"EOF";
From: $mailfrom
To: $mailto
Subject: FOUND VIRUS IN MAIL from $SENDER
print MAIL <<"EOF";
Here are the headers:
------------------------- BEGIN HEADERS -----------------------------
EOF
$entity->print_header(*MAIL);
print MAIL <<"EOF";
-------------------------- END HEADERS ------------------------------
EOF
close(MAIL);
}




Avatar
dominix
Olivier Exbrayat wrote:
Voici le style de solution que j'ai trouvé pour mon probleme. Le code
n'est surement pas trés élégant mais ca roule.

...

Merci pour vos aides et à bientot.

Olivier

"Olivier Exbrayat" a écrit dans le message de
news:bvc11p$3eo$
Salut,

J'ai besoin de modifier l'antivirus de mail amavis. Je veux qu'il
m'envoie uniquement les alertes lorsque l'ip de l'émetteur
correspond à un réseau donné.
...



Merci pour tout exemple de code

Olivier




comment veux tu que l'on te donne d'autres conseils lorsque tu ne suis pas
ceux de base:

1) postez a l'endroit = mettez le texte ajouté APRES celui du posteur
précédent
2) ne citez PAS le message précédent au complet si ce n'est pas utile


NB: la regex devrais plutot etre
/^from.+([10.d{1,3}.d{1,3}.d{1,3}].+/

mes 0.02

--
dominix