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版に僕のコードを使っていただきました。ありがとうございます。