Spam-Mailstatistik

09/10/2007 - 16:08 von Erik Griffin | Report spam
Hallo!

Ich habe hier eine Datei (im folgenden spam.txt genannt) von ca. 2,5GB
mit 296453 Spam-Mails. Format ist Seamonkey/Mozilla - also àhnelt sehr
dem mbox-Format. Nun würde ich gern wissen an welche E-Mail-Adresse
wieviele SPAM's gegangen sind. Dazu habe ich folgendes gemacht:

grep ^To: spam.txt | \
tr A-Z a-z | \
sed 's/^to: //g;s/^<//g;s/^\s//g;s/^"//g;s/=?iso.*?=//g' | \
sort | \
uniq -c

Jedoch habe ich immer noch komische Artefakte, die ich durch mein
Regelwerk nicht abgefangen bzw. womöglich erst dadurch erzeugt habe. Ich
möchte also die Anzahl der SPAM-Mails für jede Empfàngeradresse
ermitteln. Jemand eine Idee dazu?

Problem sind u.a. folgende Kombinationen ein- und derselben
Empfàngeradresse:

To: user@domain.de
To: "user@domain.de"
To: <user@domain.de>
To: user@domain.de
To: "foo bar" <user@domain.de>
To: =?iso-8859-1?...?= <user@domain.de>
To: user@domain.de, andereruser@domain.de, andereruser@anderedomain.de

und Kombinationen daraus. Bei letzterem Fall hatte ich überlegt das ","
einfach durch einen "" zu ersetzen und dann die Mail-Adressen einzeln
zu behandeln...

Grund des ganzen: Ich möchte einige Mailadresse àndern/deaktivieren, da
mittlerweile ein Mailaufkommen von >900Mails/Tag trotz Filterung
irgendwie nervt.


mfg
Erik

X'Post de.comp.os.unix.shell, de.comp.lang.perl.misc, ger.ct
F'up2 ger.ct
 

Lesen sie die antworten

#1 Christoph Mehdorn Weber
29/10/2007 - 02:55 | Warnen spam
Hallo!

[Follow-Up ignoriert, da ich die andere Hierarchie nicht lese]

* Erik Griffin :

mbox-Format. Nun würde ich gern wissen an welche E-Mail-Adresse
wieviele SPAM's gegangen sind.



Ich würde zum Holen der Header Email::Folder und Email::Simple
benutzen, vielleicht so:

use Email::Folder;

my $box = Email::Folder->new("spam.mbox");
my @raw_to = map { $_->header("To") } $box->messages;

Unter der Annahme, daß du keine fiesen Adressen mit gequoteten
Leerzeichen etc. hast, könnte man nun mit m{} und einer groben Heuristik
weitermachen:

my @to;
foreach (@raw_to) {
my @tos = m{([^ <>",=]+@[^ <>",=]+};
# ggf. @tos unique machen
push(@to, @tos);
}

Und nun könnte man einfach mal @to sortieren und durchzàhlen, wie oft
welche Adresse verkommt.

Grund des ganzen: Ich möchte einige Mailadresse àndern/deaktivieren, da
mittlerweile ein Mailaufkommen von >900Mails/Tag trotz Filterung
irgendwie nervt.



Viel einfacher wàre es aber, wenn du deinem Mailserver beibringst,
ein "Envelope-To" in den Header zu schreiben. Der hat dann ein festes,
leicht parsbares Format und kann außerdem schlecht vom Spammer gefàlscht
werden. Was wirklich im "To:" steht, muß schließlich nicht zu deinen
Adressen passen.

Christoph

"President Bush has been silent on Schwarzenegger.
Of course, he can't pronounce Schwarzenegger."
(David Letterman)

Ähnliche fragen