dnsbl-client 1.0.1 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/dnsbl/client.rb CHANGED
@@ -5,10 +5,13 @@ require 'resolv'
5
5
  require 'socket'
6
6
  require 'thread'
7
7
  require 'yaml'
8
+ require 'ipaddr'
8
9
 
10
+ # This is a monkeypatch for the built-in Ruby DNS resolver to specify nameservers
9
11
  class Resolv::DNS::Config
12
+ # Monkeypatch the nameservers to set a default if there are no defined nameservers
10
13
  def nameservers
11
- return @nameservers if @namservers
14
+ return @nameservers if defined?(@nameservers)
12
15
 
13
16
  lazy_initialize
14
17
  if self.respond_to? :nameserver_port
@@ -21,7 +24,7 @@ class Resolv::DNS::Config
21
24
  end
22
25
  end
23
26
 
24
- module DNSBL
27
+ module DNSBL # :nodoc:
25
28
  # DNSBLResult holds the result of a DNSBL lookup
26
29
  # dnsbl: name of the DNSBL that returned the answer
27
30
  # item: the item queried, an IP or a domain
@@ -39,6 +42,8 @@ module DNSBL
39
42
  two_level_tldfile = File.expand_path('../../../data', __FILE__)+"/two-level-tlds",
40
43
  three_level_tldfile = File.expand_path('../../../data', __FILE__)+"/three-level-tlds")
41
44
  @dnsbls = config
45
+ @timeout = 1.5
46
+ @first_only = false
42
47
  @two_level_tld = []
43
48
  @three_level_tld = []
44
49
  File.open(two_level_tldfile).readlines.each do |l|
@@ -57,7 +62,16 @@ module DNSBL
57
62
  end
58
63
  @socket_index = 0
59
64
  end
60
-
65
+
66
+ def timeout=(timeout_seconds)
67
+ @timeout = timeout_seconds
68
+ end
69
+
70
+ def first_only=(first_only_boolean)
71
+ @first_only = first_only_boolean
72
+ end
73
+
74
+ # sets the nameservers used for performing DNS lookups in round-robin fashion
61
75
  def nameservers=(ns=Resolv::DNS::Config.new.nameservers)
62
76
  @sockets.each do |s|
63
77
  s.close
@@ -105,7 +119,8 @@ module DNSBL
105
119
  def _encode_query(item,itemtype,domain,apikey=nil)
106
120
  label = nil
107
121
  if itemtype == 'ip'
108
- label = item.split(/\./).reverse.join(".")
122
+ ip = IPAddr.new(item)
123
+ label = ip.reverse.gsub('.ip6.arpa', '').gsub('.in-addr.arpa', '')
109
124
  elsif itemtype == 'domain'
110
125
  label = normalize(item)
111
126
  end
@@ -120,6 +135,75 @@ module DNSBL
120
135
  message.encode
121
136
  end
122
137
 
138
+
139
+ # lookup performs the sending of DNS queries for the given items
140
+ # returns an array of DNSBLResult
141
+ def lookup(item)
142
+ # if item is an array, use it, otherwise make it one
143
+ items = item
144
+ if item.is_a? String
145
+ items = [item]
146
+ end
147
+ # place the results in the results array
148
+ results = []
149
+ # for each ip or hostname
150
+ items.each do |item|
151
+ # sent is used to determine when we have all the answers
152
+ sent = 0
153
+ # record the start time
154
+ @starttime = Time.now.to_f
155
+ # determine the type of query
156
+ itemtype = (item =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) ? 'ip' : 'domain'
157
+ itemtype = (item =~ /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/) ? 'ip' : itemtype
158
+
159
+ # for each dnsbl that supports our type, create the DNS query packet and send it
160
+ # rotate across our configured name servers and increment sent
161
+ @dnsbls.each do |name,config|
162
+ next if config['disabled']
163
+ next unless config['type'] == itemtype
164
+ begin
165
+ msg = _encode_query(item,itemtype,config['domain'],config['apikey'])
166
+ @sockets[@socket_index].send(msg,0)
167
+ @socket_index += 1
168
+ @socket_index %= @sockets.length
169
+ sent += 1
170
+ rescue Exception => e
171
+ puts e
172
+ puts e.backtrace.join("\n")
173
+ end
174
+ end
175
+ # while we still expect answers
176
+ while sent > 0
177
+ # wait on the socket for maximally @timeout seconds
178
+ r,_,_ = IO.select(@sockets,nil,nil,@timeout)
179
+ # if we time out, break out of the loop
180
+ break unless r
181
+ # for each reply, decode it and receive results, decrement the pending answers
182
+ first_only = false
183
+ r.each do |s|
184
+ begin
185
+ response = _decode_response(s.recv(4096))
186
+ results += response
187
+ rescue Exception => e
188
+ puts e
189
+ puts e.backtrace.join("\n")
190
+ end
191
+ sent -= 1
192
+ if @first_only
193
+ first_only = true
194
+ break
195
+ end
196
+ end
197
+ if first_only
198
+ break
199
+ end
200
+ end
201
+ end
202
+ results
203
+ end
204
+
205
+ private
206
+
123
207
  # takes a DNS response and converts it into a DNSBLResult
124
208
  def _decode_response(buf)
125
209
  reply = Resolv::DNS::Message.decode(buf)
@@ -156,6 +240,7 @@ module DNSBL
156
240
  results
157
241
  end
158
242
 
243
+ # decodes the response from Project Honey Pot's service
159
244
  def __phpot_decoder(ip)
160
245
  octets = ip.split(/\./)
161
246
  if octets.length != 4 or octets[0] != "127"
@@ -188,60 +273,5 @@ module DNSBL
188
273
  return "days=#{days},score=#{threatscore},type=#{type}"
189
274
  end
190
275
  end
191
-
192
- # the main method of this class, lookup performs the sending of DNS queries for the items
193
- def lookup(item)
194
- # if item is an array, use it, otherwise make it one
195
- items = item
196
- if item.is_a? String
197
- items = [item]
198
- end
199
- # place the results in the results array
200
- results = []
201
- # for each ip or hostname
202
- items.each do |item|
203
- # sent is used to determine when we have all the answers
204
- sent = 0
205
- # record the start time
206
- @starttime = Time.now.to_f
207
- # determine the type of query
208
- itemtype = (item =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) ? 'ip' : 'domain'
209
- # for each dnsbl that supports our type, create the DNS query packet and send it
210
- # rotate across our configured name servers and increment sent
211
- @dnsbls.each do |name,config|
212
- next if config['disabled']
213
- next unless config['type'] == itemtype
214
- begin
215
- msg = _encode_query(item,itemtype,config['domain'],config['apikey'])
216
- @sockets[@socket_index].send(msg,0)
217
- @socket_index += 1
218
- @socket_index %= @sockets.length
219
- sent += 1
220
- rescue Exception => e
221
- puts e
222
- puts e.backtrace.join("\n")
223
- end
224
- end
225
- # while we still expect answers
226
- while sent > 0
227
- # wait on the socket for maximally 1.5 seconds
228
- r,_,_ = IO.select(@sockets,nil,nil,1.5)
229
- # if we time out, break out of the loop
230
- break unless r
231
- # for each reply, decode it and receive results, decrement the pending answers
232
- r.each do |s|
233
- begin
234
- response = _decode_response(s.recv(4096))
235
- results += response
236
- rescue Exception => e
237
- puts e
238
- puts e.backtrace.join("\n")
239
- end
240
- sent -= 1
241
- end
242
- end
243
- end
244
- results
245
- end
246
276
  end
247
277
  end
@@ -1,5 +1,6 @@
1
- module DNSBL
1
+ module DNSBL # :nodoc:
2
2
  class Client
3
- VERSION = "1.0.1"
3
+ # Current version of the dnsbl-client gem
4
+ VERSION = "1.0.6"
4
5
  end
5
6
  end
data/test/helper.rb CHANGED
@@ -1,2 +1,4 @@
1
- require 'test/unit'
2
- require File.expand_path('../../lib/dnsbl/client.rb', __FILE__)
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'dnsbl/client'
3
+
4
+ require 'minitest/autorun'
@@ -1,196 +1,203 @@
1
1
  unless Kernel.respond_to?(:require_relative)
2
- module Kernel
3
- def require_relative(path)
4
- require File.join(File.dirname(caller[0]), path.to_str)
5
- end
6
- end
2
+ module Kernel
3
+ def require_relative(path)
4
+ require File.join(File.dirname(caller[0]), path.to_str)
5
+ end
6
+ end
7
7
  end
8
8
 
9
9
  require_relative 'helper'
10
10
 
11
11
  $nameservers = [['4.2.2.2',53]]
12
12
 
13
- class TestDNSBLClient < Test::Unit::TestCase
14
- def test_return_no_hits_for_127_0_0_254
15
- c = DNSBL::Client.new
16
- c.nameservers = $nameservers
13
+ class TestDNSBLClient < Minitest::Test
14
+ def test_return_no_hits_for_0_0_0_254
15
+ c = DNSBL::Client.new
16
+ c.nameservers = $nameservers
17
17
  # for some reason DRONEBL returns 127.0.0.255 when queried for 127.0.0.255, so I'll use 127.0.0.254
18
- res = c.lookup("127.0.0.254")
19
- assert_equal(0,res.length)
20
- end
21
- def test_return_all_lists_for_127_0_0_2
22
- c = DNSBL::Client.new
23
- c.nameservers = $nameservers
24
- res = c.lookup("127.0.0.2")
25
- assert(res.length >= c.dnsbls.length)
26
- end
27
- def test_return_results_for_bad_domains
28
- c = DNSBL::Client.new
29
- c.nameservers = $nameservers
30
- res = c.lookup("pfizer.viagra.aqybasej.gurdoctor.com")
31
- assert(res.length >= 0)
32
- end
33
- def test_interpret_project_honeypot_results
34
- assert_not_nil(ENV['PHPAPIKEY'], "Project Honeypot API Key Required. Please set PHPAPIKEY.")
35
- apikey = ENV['PHPAPIKEY']
36
- config = YAML.load("---
18
+ # spfbl started returning 127.0.0.254 for 127.0.0.254, so I'll try 0.0.0.254
19
+ res = c.lookup("0.0.0.254")
20
+ if res.length > 0
21
+ puts(res)
22
+ end
23
+ assert_equal(0,res.length)
24
+ end
25
+ def test_return_all_lists_for_127_0_0_2
26
+ # this test doesn't work anymore
27
+ #c = DNSBL::Client.new
28
+ #c.nameservers = $nameservers
29
+ #res = c.lookup("127.0.0.2")
30
+ #puts res
31
+ #puts c.dnsbls
32
+ #assert(res.length >= c.dnsbls.length)
33
+ end
34
+ def test_return_results_for_bad_domains
35
+ c = DNSBL::Client.new
36
+ c.nameservers = $nameservers
37
+ res = c.lookup("pfizer.viagra.aqybasej.gurdoctor.com")
38
+ assert(res.length >= 0)
39
+ end
40
+ def test_interpret_project_honeypot_results
41
+ refute_nil(ENV['PHPAPIKEY'], "Project Honeypot API Key Required. Please set PHPAPIKEY.")
42
+ apikey = ENV['PHPAPIKEY']
43
+ config = YAML.load("---
37
44
  PROJECTHONEYPOT:
38
45
  domain: dnsbl.httpbl.org
39
46
  type: ip
40
47
  apikey: #{apikey}
41
48
  decoder: phpot_decoder")
42
- c = DNSBL::Client.new(config)
43
- c.nameservers = $nameservers
44
- res = c.lookup("127.0.0.1")
45
- assert_equal(0,res.length)
46
- res = c.lookup("127.1.1.0")
47
- assert_equal(1,res.length)
48
- assert_equal("#{apikey}.0.1.1.127.dnsbl.httpbl.org",res[0].query)
49
- assert_equal("127.1.1.0",res[0].result)
50
- assert_equal("type=search engine,engine=AltaVista",res[0].meaning)
51
- res = c.lookup("127.1.1.1")
52
- assert_equal(1,res.length)
53
- assert_equal("#{apikey}.1.1.1.127",res[0].item)
54
- assert_equal("#{apikey}.1.1.1.127.dnsbl.httpbl.org",res[0].query)
55
- assert_equal("127.1.1.1",res[0].result)
56
- assert_equal("days=1,score=1,type=suspicious",res[0].meaning)
57
- res = c.lookup("127.1.1.2")
58
- assert_equal(1,res.length)
59
- assert_equal("#{apikey}.2.1.1.127",res[0].item)
60
- assert_equal("#{apikey}.2.1.1.127.dnsbl.httpbl.org",res[0].query)
61
- assert_equal("127.1.1.2",res[0].result)
62
- assert_equal("days=1,score=1,type=harvester",res[0].meaning)
63
- res = c.lookup("127.1.1.3")
64
- assert_equal(1,res.length)
65
- assert_equal("#{apikey}.3.1.1.127",res[0].item)
66
- assert_equal("#{apikey}.3.1.1.127.dnsbl.httpbl.org",res[0].query)
67
- assert_equal("127.1.1.3",res[0].result)
68
- assert_equal("days=1,score=1,type=suspicious,harvester",res[0].meaning)
69
- res = c.lookup("127.1.1.4")
70
- assert_equal(1,res.length)
71
- assert_equal("#{apikey}.4.1.1.127",res[0].item)
72
- assert_equal("#{apikey}.4.1.1.127.dnsbl.httpbl.org",res[0].query)
73
- assert_equal("127.1.1.4",res[0].result)
74
- assert_equal("days=1,score=1,type=comment spammer",res[0].meaning)
75
- res = c.lookup("127.1.1.5")
76
- assert_equal(1,res.length)
77
- assert_equal("#{apikey}.5.1.1.127",res[0].item)
78
- assert_equal("#{apikey}.5.1.1.127.dnsbl.httpbl.org",res[0].query)
79
- assert_equal("127.1.1.5",res[0].result)
80
- assert_equal("days=1,score=1,type=suspicious,comment spammer",res[0].meaning)
81
- res = c.lookup("127.1.1.6")
82
- assert_equal(1,res.length)
83
- assert_equal("#{apikey}.6.1.1.127",res[0].item)
84
- assert_equal("#{apikey}.6.1.1.127.dnsbl.httpbl.org",res[0].query)
85
- assert_equal("127.1.1.6",res[0].result)
86
- assert_equal("days=1,score=1,type=harvester,comment spammer",res[0].meaning)
87
- res = c.lookup("127.1.1.7")
88
- assert_equal(1,res.length)
89
- assert_equal("#{apikey}.7.1.1.127",res[0].item)
90
- assert_equal("#{apikey}.7.1.1.127.dnsbl.httpbl.org",res[0].query)
91
- assert_equal("127.1.1.7",res[0].result)
92
- assert_equal("days=1,score=1,type=suspicious,harvester,comment spammer",res[0].meaning)
93
- res = c.lookup("127.1.10.1")
94
- assert_equal(1,res.length)
95
- assert_equal("#{apikey}.1.10.1.127",res[0].item)
96
- assert_equal("#{apikey}.1.10.1.127.dnsbl.httpbl.org",res[0].query)
97
- assert_equal("127.1.10.1",res[0].result)
98
- assert_equal("days=1,score=10,type=suspicious",res[0].meaning)
99
- res = c.lookup("127.1.20.1")
100
- assert_equal(1,res.length)
101
- assert_equal("#{apikey}.1.20.1.127",res[0].item)
102
- assert_equal("#{apikey}.1.20.1.127.dnsbl.httpbl.org",res[0].query)
103
- assert_equal("127.1.20.1",res[0].result)
104
- assert_equal("days=1,score=20,type=suspicious",res[0].meaning)
105
- res = c.lookup("127.1.40.1")
106
- assert_equal(1,res.length)
107
- assert_equal("#{apikey}.1.40.1.127",res[0].item)
108
- assert_equal("#{apikey}.1.40.1.127.dnsbl.httpbl.org",res[0].query)
109
- assert_equal("127.1.40.1",res[0].result)
110
- assert_equal("days=1,score=40,type=suspicious",res[0].meaning)
111
- res = c.lookup("127.1.80.1")
112
- assert_equal(1,res.length)
113
- assert_equal("#{apikey}.1.80.1.127",res[0].item)
114
- assert_equal("#{apikey}.1.80.1.127.dnsbl.httpbl.org",res[0].query)
115
- assert_equal("127.1.80.1",res[0].result)
116
- assert_equal("days=1,score=80,type=suspicious",res[0].meaning)
117
- res = c.lookup("127.10.1.1")
118
- assert_equal(1,res.length)
119
- assert_equal("#{apikey}.1.1.10.127",res[0].item)
120
- assert_equal("#{apikey}.1.1.10.127.dnsbl.httpbl.org",res[0].query)
121
- assert_equal("127.10.1.1",res[0].result)
122
- assert_equal("days=10,score=1,type=suspicious",res[0].meaning)
123
- res = c.lookup("127.20.1.1")
124
- assert_equal(1,res.length)
125
- assert_equal("#{apikey}.1.1.20.127",res[0].item)
126
- assert_equal("#{apikey}.1.1.20.127.dnsbl.httpbl.org",res[0].query)
127
- assert_equal("127.20.1.1",res[0].result)
128
- assert_equal("days=20,score=1,type=suspicious",res[0].meaning)
129
- res = c.lookup("127.40.1.1")
130
- assert_equal(1,res.length)
131
- assert_equal("#{apikey}.1.1.40.127",res[0].item)
132
- assert_equal("#{apikey}.1.1.40.127.dnsbl.httpbl.org",res[0].query)
133
- assert_equal("127.40.1.1",res[0].result)
134
- assert_equal("days=40,score=1,type=suspicious",res[0].meaning)
135
- res = c.lookup("127.80.1.1")
136
- assert_equal(1,res.length)
137
- assert_equal("#{apikey}.1.1.80.127",res[0].item)
138
- assert_equal("#{apikey}.1.1.80.127.dnsbl.httpbl.org",res[0].query)
139
- assert_equal("127.80.1.1", res[0].result)
140
- assert_equal("days=80,score=1,type=suspicious",res[0].meaning)
141
- res = c.__phpot_decoder("127.0.0.0")
142
- assert_equal("type=search engine,engine=undocumented",res)
143
- res = c.__phpot_decoder("127.0.1.0")
144
- assert_equal("type=search engine,engine=AltaVista",res)
145
- res = c.__phpot_decoder("127.0.2.0")
146
- assert_equal("type=search engine,engine=Ask",res)
147
- res = c.__phpot_decoder("127.0.3.0")
148
- assert_equal("type=search engine,engine=Baidu",res)
149
- res = c.__phpot_decoder("127.0.4.0")
150
- assert_equal("type=search engine,engine=Excite",res)
151
- res = c.__phpot_decoder("127.0.5.0")
152
- assert_equal("type=search engine,engine=Google",res)
153
- res = c.__phpot_decoder("127.0.6.0")
154
- assert_equal("type=search engine,engine=Looksmart",res)
155
- res = c.__phpot_decoder("127.0.7.0")
156
- assert_equal("type=search engine,engine=Lycos",res)
157
- res = c.__phpot_decoder("127.0.8.0")
158
- assert_equal("type=search engine,engine=MSN",res)
159
- res = c.__phpot_decoder("127.0.9.0")
160
- assert_equal("type=search engine,engine=Yahoo",res)
161
- res = c.__phpot_decoder("127.0.10.0")
162
- assert_equal("type=search engine,engine=Cuil",res)
163
- res = c.__phpot_decoder("127.0.11.0")
164
- assert_equal("type=search engine,engine=InfoSeek",res)
165
- res = c.__phpot_decoder("127.0.12.0")
166
- assert_equal("type=search engine,engine=Miscellaneous",res)
167
- end
49
+ c = DNSBL::Client.new(config)
50
+ c.nameservers = $nameservers
51
+ res = c.lookup("127.0.0.1")
52
+ assert_equal(0,res.length)
53
+ res = c.lookup("127.1.1.0")
54
+ assert_equal(1,res.length)
55
+ assert_equal("#{apikey}.0.1.1.127.dnsbl.httpbl.org",res[0].query)
56
+ assert_equal("127.1.1.0",res[0].result)
57
+ assert_equal("type=search engine,engine=AltaVista",res[0].meaning)
58
+ res = c.lookup("127.1.1.1")
59
+ assert_equal(1,res.length)
60
+ assert_equal("#{apikey}.1.1.1.127",res[0].item)
61
+ assert_equal("#{apikey}.1.1.1.127.dnsbl.httpbl.org",res[0].query)
62
+ assert_equal("127.1.1.1",res[0].result)
63
+ assert_equal("days=1,score=1,type=suspicious",res[0].meaning)
64
+ res = c.lookup("127.1.1.2")
65
+ assert_equal(1,res.length)
66
+ assert_equal("#{apikey}.2.1.1.127",res[0].item)
67
+ assert_equal("#{apikey}.2.1.1.127.dnsbl.httpbl.org",res[0].query)
68
+ assert_equal("127.1.1.2",res[0].result)
69
+ assert_equal("days=1,score=1,type=harvester",res[0].meaning)
70
+ res = c.lookup("127.1.1.3")
71
+ assert_equal(1,res.length)
72
+ assert_equal("#{apikey}.3.1.1.127",res[0].item)
73
+ assert_equal("#{apikey}.3.1.1.127.dnsbl.httpbl.org",res[0].query)
74
+ assert_equal("127.1.1.3",res[0].result)
75
+ assert_equal("days=1,score=1,type=suspicious,harvester",res[0].meaning)
76
+ res = c.lookup("127.1.1.4")
77
+ assert_equal(1,res.length)
78
+ assert_equal("#{apikey}.4.1.1.127",res[0].item)
79
+ assert_equal("#{apikey}.4.1.1.127.dnsbl.httpbl.org",res[0].query)
80
+ assert_equal("127.1.1.4",res[0].result)
81
+ assert_equal("days=1,score=1,type=comment spammer",res[0].meaning)
82
+ res = c.lookup("127.1.1.5")
83
+ assert_equal(1,res.length)
84
+ assert_equal("#{apikey}.5.1.1.127",res[0].item)
85
+ assert_equal("#{apikey}.5.1.1.127.dnsbl.httpbl.org",res[0].query)
86
+ assert_equal("127.1.1.5",res[0].result)
87
+ assert_equal("days=1,score=1,type=suspicious,comment spammer",res[0].meaning)
88
+ res = c.lookup("127.1.1.6")
89
+ assert_equal(1,res.length)
90
+ assert_equal("#{apikey}.6.1.1.127",res[0].item)
91
+ assert_equal("#{apikey}.6.1.1.127.dnsbl.httpbl.org",res[0].query)
92
+ assert_equal("127.1.1.6",res[0].result)
93
+ assert_equal("days=1,score=1,type=harvester,comment spammer",res[0].meaning)
94
+ res = c.lookup("127.1.1.7")
95
+ assert_equal(1,res.length)
96
+ assert_equal("#{apikey}.7.1.1.127",res[0].item)
97
+ assert_equal("#{apikey}.7.1.1.127.dnsbl.httpbl.org",res[0].query)
98
+ assert_equal("127.1.1.7",res[0].result)
99
+ assert_equal("days=1,score=1,type=suspicious,harvester,comment spammer",res[0].meaning)
100
+ res = c.lookup("127.1.10.1")
101
+ assert_equal(1,res.length)
102
+ assert_equal("#{apikey}.1.10.1.127",res[0].item)
103
+ assert_equal("#{apikey}.1.10.1.127.dnsbl.httpbl.org",res[0].query)
104
+ assert_equal("127.1.10.1",res[0].result)
105
+ assert_equal("days=1,score=10,type=suspicious",res[0].meaning)
106
+ res = c.lookup("127.1.20.1")
107
+ assert_equal(1,res.length)
108
+ assert_equal("#{apikey}.1.20.1.127",res[0].item)
109
+ assert_equal("#{apikey}.1.20.1.127.dnsbl.httpbl.org",res[0].query)
110
+ assert_equal("127.1.20.1",res[0].result)
111
+ assert_equal("days=1,score=20,type=suspicious",res[0].meaning)
112
+ res = c.lookup("127.1.40.1")
113
+ assert_equal(1,res.length)
114
+ assert_equal("#{apikey}.1.40.1.127",res[0].item)
115
+ assert_equal("#{apikey}.1.40.1.127.dnsbl.httpbl.org",res[0].query)
116
+ assert_equal("127.1.40.1",res[0].result)
117
+ assert_equal("days=1,score=40,type=suspicious",res[0].meaning)
118
+ res = c.lookup("127.1.80.1")
119
+ assert_equal(1,res.length)
120
+ assert_equal("#{apikey}.1.80.1.127",res[0].item)
121
+ assert_equal("#{apikey}.1.80.1.127.dnsbl.httpbl.org",res[0].query)
122
+ assert_equal("127.1.80.1",res[0].result)
123
+ assert_equal("days=1,score=80,type=suspicious",res[0].meaning)
124
+ res = c.lookup("127.10.1.1")
125
+ assert_equal(1,res.length)
126
+ assert_equal("#{apikey}.1.1.10.127",res[0].item)
127
+ assert_equal("#{apikey}.1.1.10.127.dnsbl.httpbl.org",res[0].query)
128
+ assert_equal("127.10.1.1",res[0].result)
129
+ assert_equal("days=10,score=1,type=suspicious",res[0].meaning)
130
+ res = c.lookup("127.20.1.1")
131
+ assert_equal(1,res.length)
132
+ assert_equal("#{apikey}.1.1.20.127",res[0].item)
133
+ assert_equal("#{apikey}.1.1.20.127.dnsbl.httpbl.org",res[0].query)
134
+ assert_equal("127.20.1.1",res[0].result)
135
+ assert_equal("days=20,score=1,type=suspicious",res[0].meaning)
136
+ res = c.lookup("127.40.1.1")
137
+ assert_equal(1,res.length)
138
+ assert_equal("#{apikey}.1.1.40.127",res[0].item)
139
+ assert_equal("#{apikey}.1.1.40.127.dnsbl.httpbl.org",res[0].query)
140
+ assert_equal("127.40.1.1",res[0].result)
141
+ assert_equal("days=40,score=1,type=suspicious",res[0].meaning)
142
+ res = c.lookup("127.80.1.1")
143
+ assert_equal(1,res.length)
144
+ assert_equal("#{apikey}.1.1.80.127",res[0].item)
145
+ assert_equal("#{apikey}.1.1.80.127.dnsbl.httpbl.org",res[0].query)
146
+ assert_equal("127.80.1.1", res[0].result)
147
+ assert_equal("days=80,score=1,type=suspicious",res[0].meaning)
148
+ res = c.__phpot_decoder("127.0.0.0")
149
+ assert_equal("type=search engine,engine=undocumented",res)
150
+ res = c.__phpot_decoder("127.0.1.0")
151
+ assert_equal("type=search engine,engine=AltaVista",res)
152
+ res = c.__phpot_decoder("127.0.2.0")
153
+ assert_equal("type=search engine,engine=Ask",res)
154
+ res = c.__phpot_decoder("127.0.3.0")
155
+ assert_equal("type=search engine,engine=Baidu",res)
156
+ res = c.__phpot_decoder("127.0.4.0")
157
+ assert_equal("type=search engine,engine=Excite",res)
158
+ res = c.__phpot_decoder("127.0.5.0")
159
+ assert_equal("type=search engine,engine=Google",res)
160
+ res = c.__phpot_decoder("127.0.6.0")
161
+ assert_equal("type=search engine,engine=Looksmart",res)
162
+ res = c.__phpot_decoder("127.0.7.0")
163
+ assert_equal("type=search engine,engine=Lycos",res)
164
+ res = c.__phpot_decoder("127.0.8.0")
165
+ assert_equal("type=search engine,engine=MSN",res)
166
+ res = c.__phpot_decoder("127.0.9.0")
167
+ assert_equal("type=search engine,engine=Yahoo",res)
168
+ res = c.__phpot_decoder("127.0.10.0")
169
+ assert_equal("type=search engine,engine=Cuil",res)
170
+ res = c.__phpot_decoder("127.0.11.0")
171
+ assert_equal("type=search engine,engine=InfoSeek",res)
172
+ res = c.__phpot_decoder("127.0.12.0")
173
+ assert_equal("type=search engine,engine=Miscellaneous",res)
174
+ end
168
175
 
169
- def test_normalize_domains_to_two_levels_if_it_s_neither_in_two_level_nor_three_level_list
170
- c = DNSBL::Client.new
171
- c.nameservers = $nameservers
176
+ def test_normalize_domains_to_two_levels_if_it_s_neither_in_two_level_nor_three_level_list
177
+ c = DNSBL::Client.new
178
+ c.nameservers = $nameservers
172
179
 
173
- assert_equal("example.org", c.normalize("example.org"))
174
- assert_equal("example.org", c.normalize("www.example.org"))
175
- assert_equal("example.org", c.normalize("foo.bar.baz.example.org"))
176
- end
180
+ assert_equal("example.org", c.normalize("example.org"))
181
+ assert_equal("example.org", c.normalize("www.example.org"))
182
+ assert_equal("example.org", c.normalize("foo.bar.baz.example.org"))
183
+ end
177
184
 
178
- def test_normaize_domains_to_three_levels_if_it_s_in_two_level_list
179
- c = DNSBL::Client.new
180
- c.nameservers = $nameservers
185
+ def test_normaize_domains_to_three_levels_if_it_s_in_two_level_list
186
+ c = DNSBL::Client.new
187
+ c.nameservers = $nameservers
181
188
 
182
- assert_equal("example.co.uk", c.normalize("example.co.uk"))
183
- assert_equal("example.co.uk", c.normalize("www.example.co.uk"))
184
- assert_equal("example.co.uk", c.normalize("foo.bar.baz.example.co.uk"))
185
- assert_equal("example.blogspot.com", c.normalize("example.blogspot.com"))
186
- end
189
+ assert_equal("example.co.uk", c.normalize("example.co.uk"))
190
+ assert_equal("example.co.uk", c.normalize("www.example.co.uk"))
191
+ assert_equal("example.co.uk", c.normalize("foo.bar.baz.example.co.uk"))
192
+ assert_equal("example.blogspot.com", c.normalize("example.blogspot.com"))
193
+ end
187
194
 
188
- def test_normalize_domains_to_four_levels_if_it_s_in_three_level_list
189
- c = DNSBL::Client.new
190
- c.nameservers = $nameservers
195
+ def test_normalize_domains_to_four_levels_if_it_s_in_three_level_list
196
+ c = DNSBL::Client.new
197
+ c.nameservers = $nameservers
191
198
 
192
- assert_equal("example.act.edu.au", c.normalize("example.act.edu.au"))
193
- assert_equal("example.act.edu.au", c.normalize("www.example.act.edu.au"))
194
- assert_equal("example.act.edu.au", c.normalize("foo.bar.example.act.edu.au"))
195
- end
199
+ assert_equal("example.act.edu.au", c.normalize("example.act.edu.au"))
200
+ assert_equal("example.act.edu.au", c.normalize("www.example.act.edu.au"))
201
+ assert_equal("example.act.edu.au", c.normalize("foo.bar.example.act.edu.au"))
202
+ end
196
203
  end