備忘録のため,内容の正当性については責任を持ちません。

ここ一ヶ月間で我が家のサーバに届いた迷惑メール約 1 万通について、本文に含まれる URL を解析した。

本文に含まれる 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 の TLD ごとの集計

とりあえず今日はここまで。次は発信元の国でも調べてみようか。


コメント

コメント(1) “迷惑メールの本文に含まれる URL を分析する”

  1. […] 参考:迷惑メールの本文に含まれる URL を分析する : あかぎメモ カテゴリー: 未分類 タグ: CGI, Perl, TLD, Whois, 抽出 コメント (0) トラックバック (0) コメントをどうぞ トラックバックU […]

コメントする




CAPTCHA