TransFreeBSDの日記 このページをアンテナに追加 RSSフィード

2007-02-12

[] spamかどうかを判別するやつ。 - くれすのPerl日記 - Hatena::Group::Perl の勝手改定版  [http://perl.g.hatena.ne.jp/Cress/20070212/1171244924:title] の勝手改定版 - TransFreeBSDの日記 を含むブックマーク

ちょうどタイムリーだったので、勝手ではありますが自分用に改定版作りました。

これで複数ファイルや標準入力から読めるようになりました。

ただ出力形式は1考の余地ありですかね。

使い方は以下のような感じで。

perl spamlookup.pl listfile1 listfile2
perl spamlookup.pl --rbl bsb.spamlookup.net --rbl niku.2ch.net listfile
awk '{print $3}' logfile | sort | uniq | perl spamlookup.pl --rbl niku.2ch.net

ソースは以下

#!/usr/bin/perl
# original http://perl.g.hatena.ne.jp/Cress/20070212/1171244924

use strict;
use Getopt::Long;
my @DEFAULT_RBL_HOST = qw(bsb.spamlookup.net);

my @RBL_HOST = ();
GetOptions('rbl=s' => \@RBL_HOST) or die;
@RBL_HOST or @RBL_HOST = @DEFAULT_RBL_HOST;

print "spamlookup server is @RBL_HOST\n";
print "\n";

while( <> ) {
    chomp;
    if( /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/ ) {
        foreach my $RBL_HOST (@RBL_HOST) {
            my $query = "$4.$3.$2.$1.$RBL_HOST";
            my $addr = join( '.', unpack( 'C*', gethostbyname( $query ) ) );
            if( $addr eq '127.0.0.2' ) {
                print "[!] $_ is spam at $RBL_HOST.\n";
            } else {
                print "    $_ is not spam at $RBL_HOST.\n";
            }
        }
    }
}

print "\n";
print "done.\n";

CressCress2007/02/12 19:13あ、コマンドライン引数ってこうやって取るんだ(汗)。CGIばっかり作ってたので全然知りませんでした。。。
spamのアドレスだけ(あるいはその逆)だけ出力できるオプションがあるともっと便利かもしれないですね。[!] は、自分で見やすいように適当に付けちゃったので。

TransFreeBSDTransFreeBSD2007/02/12 19:48複数RBL問い合わせ時も1行にまとめるとか色々ありそうだけど、とりあえずこれで。どっちかといえば精度チェックとかだと思うし(笑)

トラックバック - http://freebsd.g.hatena.ne.jp/TransFreeBSD/20070212