ここ一ヶ月間で我が家のサーバに届いた迷惑メール約 1 万通について、本文に含まれる URL を解析した。
解析の対象は mbox 形式のファイルとした。なお,今回は日本語かそうでないかは区別していない。
まずメール本文に含まれる URL を抽出する Perl スクリプト (geturl.pl) を作成した。
$ vi geturl.pl
#!/usr/bin/perl
use strict;
my ($flag, $url, $host);
my (%hosts);
$flag = 0;
while (<stdin>) {
# 改行を除去
$_ =~ s/\n|\r//g;
# ヘッダをスキップ
if ($_ =~ /^From /) { $flag = 1; }
elsif ($flag == 1 && $_ eq '') { $flag = 2; }
elsif ($flag != 2) { next; }
# URLを抽出
if ($_ !~ /(https?:\/\/[a-zA-Z0-9\-\.]+(\/[a-zA-Z0-9\-_\.\/%\?=~]+)?)/) { next; }
$url = $1;
if ($url !~ /https?:\/\/([a-zA-Z0-9\-\.]+)/) { next; }
print $url . "\n";
}
これは,次のように標準入力にリダイレクトして使用する。
$ cat Junk | perl ./geturl.pl
このスクリプトにより、次のようなリストが出力される。
http://partlofty.com
http://partlofty.com
http://768.toclock.com
http://986.browninch.com
http://833.toclock.com/hsag34.jpg
http://796.toclock.com
http://154.toclock.com
http://840.toclock.com
http://ninjamao.com/viva/
http://partlofty.com
:
続いて,生成した URL のリストから,ドメイン名 (とその TLD) と登場回数を求める Perl スクリプト (getdomain.pl) を作成した。なお,今回はセカンドレベルドメインまでしか考慮していない。また,ぱっと目についた,明らかに SPAM ではないドメイン名 (w3c.org とか) は取り除いた。
$ vi getdomain.pl
#!/usr/bin/perl
use strict;
my ($host, $domain, $tld);
my (%domains);
while (<STDIN>) {
if ($_ !~ /^https?:\/\/([a-zA-Z0-9\-\.]+)/) { next; }
$host = lc($1);
if ($host =~ /([a-z0-9\-]+\.[a-z]+)$/) {
$domain = $1;
$domains{$domain}++;
}
}
foreach $domain (sort {$domains{$b} <=> $domains{$a}} keys %domains) {
# SPAM じゃないのは除外
if ($domain =~ /(w3\.org|microsoft\.com|passport\.com)/) { next; }
$tld = '';
if ($domain !~ /\.([a-zA-Z]{2,6})$/) { next; }
$tld = $1;
print $domains{$domain} . ',' . $domain . ',' . $tld . "\n";
}
上記の 2 つのスクリプトを組み合わせて,次のように実行する。
$ cat thunderbird/Junk | perl ./geturl.pl | perl ./getdomain.pl > domain.csv
すると,次のような csv ファイルが生成される。
1311,icontact.com,com
501,imageshack.us,us
450,imageshost.ru,ru
433,app.icon,icon
336,thingensure.com,com
336,grandgrass.com,com
333,extolbell.com,com
320,hopedesert.com,com
310,felthim.com,com
299,myimg.de,de
:
これを TLD ごとに集計して,グラフにしてみたところ,ロシアの ccTLD (.ru) が過半数超えの圧勝であった。
とりあえず今日はここまで。次は発信元の国でも調べてみようか。
コメント
[…] 参考:迷惑メールの本文に含まれる URL を分析する : あかぎメモ カテゴリー: 未分類 タグ: CGI, Perl, TLD, Whois, 抽出 コメント (0) トラックバック (0) コメントをどうぞ トラックバックU […]