2010年9月11日土曜日

Harmful.pm の仕様変更

Harmful.pmをIPアドレスのみのチェックとし、シンプルなものに変更しました。
といってもこれ、過去に自分が書いたものの修正版です(そのときは公開はしていません)。

Download Harmful.pm

このModuleは、デフォルトでモジュールファイルの__DATA__から下をロードします。
モジュールをuseした際にファイル名を指定することでロード元を変更できます。

use Harmful 'Harmful.txt'; # Harmful.txt をロード

ロードするデータは、パックされたIPアドレスを16進数に変換したもの(通常"Harmful::sign"を使う)を改行(LF)で区切った形式です(Windowsの場合テキストモードなのでCRLF(Version 1.1.0以降LF,CR,CRLFに対応)。
次に各サブルーチンの解説です。"Harmful::sign"は渡されたサーバー名(リスト)のIPアドレスを16進数に変換したものを返します。

use Harmful 'Harmful.txt';
  print join "\n",Harmful::sign 'www.google.co.jp','www.yahoo.co.jp';
  print scalar Harmful::sign 'www.google.co.jp','www.yahoo.co.jp';
# スカラー(スケーラー)で評価すると第一引数のみを変換したものを返す

"Harmful::judge"は渡されたサーバー名(リスト)をsign値に変換し、ロードしたIPアドレスのリストに含まれているか確認し、IPアドレスがロードデータに含まれるサーバー名を返します。

use Harmful 'Harmful.txt';
  print join "\n",Harmful::judge 'www.google.co.jp','www.yahoo.co.jp';
  print scalar Harmful::judge 'www.google.co.jp','www.yahoo.co.jp';
# スカラー(スケーラー)で評価すると第一引数のみをチェックする

掲示板等の投稿からサーバー名(ホスト)を輸出してジャッジするには以下のようにします。

use Harmful 'Harmful.txt';
 Harmful::judge $msg =~ m{://([\w\.\-]+)}g;

前回説明した通り、Harmfulモジュールの各サブルーチンで使われているgethostbyname関数は遅いので入力できるURIは5つ程に制限して下さい。

"*Harmful::DATA"ファイルハンドルはVersion 1.2.2以降ロード終了時にクローズされます。

これで解説を終わります。
ついでに、私が収集した宣伝されるサーバーのIPアドレスを多かった順に21種類公開しておきます。

Download Harmful IP addres List

スパマーによって宣伝されるサーバー名はエイリアスがかなり多いので、IPアドレスは今のところ100種類程度で十分すぎます。

0 件のコメント:

コメントを投稿