2008/10/29 カテゴリ : Tech  PHP  spam  class 

「スパムちゃんぷるーDNSBL」をPHPから利用するServices_SpamChampuru_DNSBL

こんにちは、いつもブログネタなしで泣いてる亀本です。


昨日、livedoorが各所で利用しているというスパムフィルタ「スパムちゃんぷるー」のDNSBL(ブラックリスト)を利用できるサービス「スパムちゃんぷるーDNSBL」が公開されました。
今回は、これをPHPから利用するクラスを作成してみました。

作成といっても、CPANにあるWebService::Livedoor::SpamChampuru::DNSBLのPHP移植です。
またか!と思ったあなたは、僕の記事を見すぎです。

またCodeReposに入れるかなー、と思っていましたが、細かすぎてそこまでのものでもない気がしたので、とりあえず以下に貼り付けておきます。
もうちょっと改変したり、スパムちゃんぷるー関連のその他API等が増えてきたら、そのうちまとめて入れようと思います。


利用に関してですが、このクラスは外部ライブラリとしてPEARのNet_DNSを利用、さらにそのNet_DNSがPHPのmhashモジュールを利用しています。
そのため、このクラスを使用する際には、まずPHPを再コンパイルするなどしてmhashモジュールを有効にした後、

  1. % sudo pear install Net_DNS

としてNet_DNSをインストールして置く必要があります。。

  1. <?php
  2. require_once 'Net/DNS.php';
  3.  
  4. /**
  5.  * Services_SpamChampuru_DNSBL
  6.  *
  7.  * @author Daichi Kamemoto(a.k.a yudoufu) <daichi@asial.co.jp>
  8.  * @version 0.0.1
  9.  */
  10. class Services_SpamChampuru_DNSBL
  11. {
  12.   private static $domain = 'dnsbl.spam-champuru.livedoor.com';
  13.   private static $spam_result = '127.0.0.2';
  14.   private $timeout = 0.1;
  15.   private $nameservers = array();
  16.  
  17.   /**
  18.    * constructor
  19.    *
  20.    * @param integer $timeout
  21.    * @param array $nameservers
  22.    */
  23.   public function __construct($timeout = null, $nameservers = null)
  24.   {
  25.     if (!is_null($timeout))
  26.     {
  27.       $this->timeout = $timeout;
  28.     }
  29.  
  30.     if (!is_null($nameservers))
  31.     {
  32.       if (!is_array($nameservers))
  33.       {
  34.         $nameservers = array($nameservers);
  35.       }
  36.       $this->nameservers = $nameservers;
  37.     }
  38.   }
  39.  
  40.   /**
  41.    * lookup
  42.    *
  43.    * @param string $ip_addr
  44.    * @return integer $score SPAM is 1, HAM is 0
  45.    */
  46.   public function lookup($ip_addr)
  47.   {
  48.     $score = 0;
  49.  
  50.     $reverse_ip_addr = implode('.', array_reverse(explode('.', $ip_addr)));
  51.     $dnsbl_request = $reverse_ip_addr . '.' . self::$domain;
  52.     
  53.     if (self::$spam_result === $this->_dns_lookup($dnsbl_request))
  54.     {
  55.       $score = 1;
  56.     }
  57.  
  58.     return $score;
  59.   }
  60.  
  61.   /**
  62.    * _dns_lookup
  63.    *
  64.    * @param string $dnsbl_request
  65.    * @return string $result
  66.    */
  67.   private function _dns_lookup($dnsbl_request = null)
  68.   {
  69.     $result = null;
  70.     $resolver = new Net_DNS_Resolver(array(
  71.                   'nameservers' => $this->nameservers,
  72.                   'tcp_timeout' => $this->timeout,
  73.                 ));
  74.  
  75.     if ($response = $resolver->query($dnsbl_request))
  76.     {
  77.       foreach ($response->answer as $rr)
  78.       {
  79.         if ($rr->type === 'A')
  80.         {
  81.           $result = $rr->address;
  82.           break;
  83.         }
  84.       }
  85.     }
  86.     return $result;
  87.   }
  88. }
  89.  
  90.  
  91. if (count(debug_backtrace())) return;
  92. // Sample Code
  93.  
  94. $dnsbl = new Services_SpamChampuru_DNSBL();
  95. $res = $dnsbl->lookup('192.0.2.1');
  96.  
  97. var_dump($res);

実際に動かしてみればわかりますが、最後に記述したサンプルの通りlookupを実行すると、指定したIPがブラックリストに登録されていればint(1)、そうでなければint(0)が返ってきます。

# なお、スパムちゃんぷるーDNSBLのページにも記述がありますが、192.0.2.1はテスト用のIPで、必ずSPAM判定が戻ってきます。

ちょっとしたライブラリですが、お役にたてば幸いです。

追記:
id:MugeSoさんにNet_DNSBLというのがあることを教えてもらいました。
もっと汎用的にやりたいというひとは、こちらがいいかもしれません><

コメント

    • 通りすがり
    • 2008年10月31日 16:16
    • http://aqua.sun.ddns.vc/blog/index.php?entry-id=4907c150562dc&view_c=Blog::Entry.html
      にもPHP版があるみたいで、スパムちゃんぷるーのページから紹介されてますね。
    • かめもと
    • 2008年10月31日 18:08
    • > 通りすがりさん
      ありがとうございますー。存じ上げております。
      なんか他にも何人か作ってらっしゃるみたいですね。

      まぁ、本文でも言っちゃってますが、正直共有する価値ないかもなーぐらいのプチクラスなので。。。リリースに気付いてから脊髄反射で書いて、せっかくなのでブログにのっけた、という感じです(^^;

      たぶん、Net_DNSBLを使ってあげるのが一番今後のためにいいような気がしますw
    • sino
    • 2008年11月24日 07:11
    • こんにちは、「コメントスパム DNSBL」でGoogle検索してこちらに来ました。

      弊社でも「スパムちゃんぷるー」同様のDNSBLサービス「スパム鯛めし」を立ち上げました。

      http://wiki.takanashi-it-factory.com/index.php?%A5%B9%A5%D1%A5%E0%C2%E4%A4%E1%A4%B7


      ユニークIPベースで92.8%、延べIPでは99.4%の高確率でスパムを検出できています。よろしければお試しいただき、使ってみてください。

コメントフォーム

認証
captcha_key
 
 

トラックバックURI

最近の記事

アシアルPHP書籍情報