2008/11/02
livedoorラボ「EDGE」が先日公開したスパム排除サービス「スパムちゃんぷるーDNSBL」のPHPモジュールを作ったかたがいたので僕もRuby版を作ってみました。ご自由に利用していただいて結構です(といっても小さなプログラムですが...)。
動作環境
ruby-1.8.6
使い方
チェックしたいIPアドレスを引数に渡すと以下の結果が返ります。
ret = CheckSpamIP(ip)
true
・SPAM発信元IPアドレスの可能性がある
・IPアドレスとして不適当
false
・SPAM発信元IPアドレスではない
ソース
require 'socket' def CheckSpamIP(check_ip = nil) # スパムIPアドレス spam_ip = "127.0.0.2" # IPアドレスが不当な場合はスパムとみなす # (単純にXXX.XXX.XXX.XXXかどうかだけチェック) return true if check_ip !~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ # IPアドレス逆順並べ替え(AAA.BBB.CCC.DDD -> DDD.CCC.BBB.AAA) ip_rev = check_ip.split(".").reverse.join(".") # 検索ドメイン生成 host = "#{ip_rev}.dnsbl.spam-champuru.livedoor.com" # ドメイン正引き begin ip = IPSocket.getaddress(host) rescue # 正引き失敗時はスパム元IPアドレス以外と判断 return false end # 正引き後アドレス判定 if ip == spam_ip # スパム return true else # スパム以外 return false end end
テスト
(ソース)
iplist = [ "192.0.2.1", # スパム判定用 "59.106.108.86", # www.hatena.ne.jp "203.131.197.197", # www.livedoor.com "1.2.3", # IPアドレス不正 "", # IPアドレス不正 ] iplist.each {|ip| ret = CheckSpamIP(ip) puts "#{ip} -> #{ret}" }
(結果)
192.0.2.1 -> true 59.106.108.86 -> false 203.131.197.197 -> false 1.2.3 -> true -> true
(2008/11/7追記)
livedoorラボ「EDGE」開発日誌とスパムちゃんぷるーDNSBLで当エントリを紹介して頂きました。ありがとうございます。(2008/11/26追記)
elecstaさんが作られたPython版に僕のコードを使っていただきました。ありがとうございます。