dnsbl-client 1.0.1 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/bin/dnsbl-client +1 -1
- data/data/dnsbl.yaml +5 -5
- data/data/three-level-tlds +2026 -124
- data/data/two-level-tlds +1952 -0
- data/lib/dnsbl/client.rb +89 -59
- data/lib/dnsbl/client/version.rb +3 -2
- data/test/helper.rb +4 -2
- data/test/test_dnsbl-client.rb +183 -176
- metadata +3 -10
- data/.gitignore +0 -17
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -22
- data/README.md +0 -37
- data/Rakefile +0 -12
- data/dnsbl-client.gemspec +0 -26
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 @
|
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
|
-
|
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
|
data/lib/dnsbl/client/version.rb
CHANGED
data/test/helper.rb
CHANGED
data/test/test_dnsbl-client.rb
CHANGED
@@ -1,196 +1,203 @@
|
|
1
1
|
unless Kernel.respond_to?(:require_relative)
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
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
|
-
|
170
|
-
|
171
|
-
|
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
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
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
|
-
|
179
|
-
|
180
|
-
|
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
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
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
|
-
|
189
|
-
|
190
|
-
|
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
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
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
|