DNSBLでspam除け
放置してた掲示板が、最近spamでウザくなってきたのでDNSBLで撥ねることにする。あのスクリプトPHPやったっけ、とか思ってたらPerlやった。Perl使ったことねぇー、と思いつつ適当に勉強して実装した。
sub CheckIP { my $addr, $rev_addr, $uri, @rbl_server; $addr = $ENV{'REMOTE_ADDR'}; $rev_addr = join('.', reverse(split(/\./, $addr))); @rbl_server = ('niku.2ch.net', 'list.dsbl.org', 'bsb.spamlookup.net'); foreach(@rbl_server){ $uri = $rev_addr . "." . $_; if( join('.', unpack("C*", gethostbyname($uri))) =~ m/^127.0.0./ ){ return 1; } } return 0; }
超適当。他のサブルーチンとの兼合いで返り値は見つかったとき0でなかったとき1。誤解を招くのでやめ。
どうでもいいけど、PerlのModuleって最後に1書かんといかんのか…?ないとrequireするときに失敗するんですけど。なんかかっこ悪い。