dnsbl-client 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/bin/dnsbl-client +0 -1
  4. data/data/three-level-tlds +1989 -2215
  5. data/data/two-level-tlds +96 -2
  6. data/lib/dnsbl/client.rb +1 -1
  7. data/lib/dnsbl/client/version.rb +1 -1
  8. data/test/helper.rb +4 -2
  9. data/test/test_dnsbl-client.rb +2 -2
  10. metadata +3 -52
  11. data/html/DNSBL.html +0 -98
  12. data/html/DNSBL/Client.html +0 -646
  13. data/html/DNSBL/DNSBLResult.html +0 -114
  14. data/html/README_md.html +0 -141
  15. data/html/Resolv.html +0 -98
  16. data/html/Resolv/DNS.html +0 -98
  17. data/html/Resolv/DNS/Config.html +0 -169
  18. data/html/created.rid +0 -4
  19. data/html/fonts.css +0 -167
  20. data/html/fonts/Lato-Light.ttf +0 -0
  21. data/html/fonts/Lato-LightItalic.ttf +0 -0
  22. data/html/fonts/Lato-Regular.ttf +0 -0
  23. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  24. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  25. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  26. data/html/images/add.png +0 -0
  27. data/html/images/arrow_up.png +0 -0
  28. data/html/images/brick.png +0 -0
  29. data/html/images/brick_link.png +0 -0
  30. data/html/images/bug.png +0 -0
  31. data/html/images/bullet_black.png +0 -0
  32. data/html/images/bullet_toggle_minus.png +0 -0
  33. data/html/images/bullet_toggle_plus.png +0 -0
  34. data/html/images/date.png +0 -0
  35. data/html/images/delete.png +0 -0
  36. data/html/images/find.png +0 -0
  37. data/html/images/loadingAnimation.gif +0 -0
  38. data/html/images/macFFBgHack.png +0 -0
  39. data/html/images/package.png +0 -0
  40. data/html/images/page_green.png +0 -0
  41. data/html/images/page_white_text.png +0 -0
  42. data/html/images/page_white_width.png +0 -0
  43. data/html/images/plugin.png +0 -0
  44. data/html/images/ruby.png +0 -0
  45. data/html/images/tag_blue.png +0 -0
  46. data/html/images/tag_green.png +0 -0
  47. data/html/images/transparent.png +0 -0
  48. data/html/images/wrench.png +0 -0
  49. data/html/images/wrench_orange.png +0 -0
  50. data/html/images/zoom.png +0 -0
  51. data/html/index.html +0 -98
  52. data/html/js/darkfish.js +0 -140
  53. data/html/js/jquery.js +0 -18
  54. data/html/js/navigation.js +0 -142
  55. data/html/js/search.js +0 -109
  56. data/html/js/search_index.js +0 -1
  57. data/html/js/searcher.js +0 -228
  58. data/html/rdoc.css +0 -580
  59. data/html/table_of_contents.html +0 -120
data/lib/dnsbl/client.rb CHANGED
@@ -10,7 +10,7 @@ require 'yaml'
10
10
  class Resolv::DNS::Config
11
11
  # Monkeypatch the nameservers to set a default if there are no defined nameservers
12
12
  def nameservers
13
- return @nameservers if @namservers
13
+ return @nameservers if @nameservers
14
14
 
15
15
  lazy_initialize
16
16
  if self.respond_to? :nameserver_port
@@ -1,6 +1,6 @@
1
1
  module DNSBL # :nodoc:
2
2
  class Client
3
3
  # Current version of the dnsbl-client gem
4
- VERSION = "1.0.2"
4
+ VERSION = "1.0.3"
5
5
  end
6
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'
@@ -10,7 +10,7 @@ require_relative 'helper'
10
10
 
11
11
  $nameservers = [['4.2.2.2',53]]
12
12
 
13
- class TestDNSBLClient < Test::Unit::TestCase
13
+ class TestDNSBLClient < Minitest::Test
14
14
  def test_return_no_hits_for_127_0_0_254
15
15
  c = DNSBL::Client.new
16
16
  c.nameservers = $nameservers
@@ -31,7 +31,7 @@ class TestDNSBLClient < Test::Unit::TestCase
31
31
  assert(res.length >= 0)
32
32
  end
33
33
  def test_interpret_project_honeypot_results
34
- assert_not_nil(ENV['PHPAPIKEY'], "Project Honeypot API Key Required. Please set PHPAPIKEY.")
34
+ refute_nil(ENV['PHPAPIKEY'], "Project Honeypot API Key Required. Please set PHPAPIKEY.")
35
35
  apikey = ENV['PHPAPIKEY']
36
36
  config = YAML.load("---
37
37
  PROJECTHONEYPOT:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnsbl-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - chrislee35
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-05 00:00:00.000000000 Z
11
+ date: 2016-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,55 +56,6 @@ files:
56
56
  - data/three-level-tlds
57
57
  - data/two-level-tlds
58
58
  - dnsbl-client.gemspec
59
- - html/DNSBL.html
60
- - html/DNSBL/Client.html
61
- - html/DNSBL/DNSBLResult.html
62
- - html/README_md.html
63
- - html/Resolv.html
64
- - html/Resolv/DNS.html
65
- - html/Resolv/DNS/Config.html
66
- - html/created.rid
67
- - html/fonts.css
68
- - html/fonts/Lato-Light.ttf
69
- - html/fonts/Lato-LightItalic.ttf
70
- - html/fonts/Lato-Regular.ttf
71
- - html/fonts/Lato-RegularItalic.ttf
72
- - html/fonts/SourceCodePro-Bold.ttf
73
- - html/fonts/SourceCodePro-Regular.ttf
74
- - html/images/add.png
75
- - html/images/arrow_up.png
76
- - html/images/brick.png
77
- - html/images/brick_link.png
78
- - html/images/bug.png
79
- - html/images/bullet_black.png
80
- - html/images/bullet_toggle_minus.png
81
- - html/images/bullet_toggle_plus.png
82
- - html/images/date.png
83
- - html/images/delete.png
84
- - html/images/find.png
85
- - html/images/loadingAnimation.gif
86
- - html/images/macFFBgHack.png
87
- - html/images/package.png
88
- - html/images/page_green.png
89
- - html/images/page_white_text.png
90
- - html/images/page_white_width.png
91
- - html/images/plugin.png
92
- - html/images/ruby.png
93
- - html/images/tag_blue.png
94
- - html/images/tag_green.png
95
- - html/images/transparent.png
96
- - html/images/wrench.png
97
- - html/images/wrench_orange.png
98
- - html/images/zoom.png
99
- - html/index.html
100
- - html/js/darkfish.js
101
- - html/js/jquery.js
102
- - html/js/navigation.js
103
- - html/js/search.js
104
- - html/js/search_index.js
105
- - html/js/searcher.js
106
- - html/rdoc.css
107
- - html/table_of_contents.html
108
59
  - lib/dnsbl/client.rb
109
60
  - lib/dnsbl/client/version.rb
110
61
  - test/helper.rb
@@ -129,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
80
  version: '0'
130
81
  requirements: []
131
82
  rubyforge_project:
132
- rubygems_version: 2.2.2
83
+ rubygems_version: 2.4.6
133
84
  signing_key:
134
85
  specification_version: 4
135
86
  summary: queries various DNS Blacklists
data/html/DNSBL.html DELETED
@@ -1,98 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta charset="UTF-8">
6
-
7
- <title>module DNSBL - RDoc Documentation</title>
8
-
9
- <link href="./fonts.css" rel="stylesheet">
10
- <link href="./rdoc.css" rel="stylesheet">
11
-
12
- <script type="text/javascript">
13
- var rdoc_rel_prefix = "./";
14
- </script>
15
-
16
- <script src="./js/jquery.js"></script>
17
- <script src="./js/navigation.js"></script>
18
- <script src="./js/search_index.js"></script>
19
- <script src="./js/search.js"></script>
20
- <script src="./js/searcher.js"></script>
21
- <script src="./js/darkfish.js"></script>
22
-
23
-
24
- <body id="top" role="document" class="module">
25
- <nav role="navigation">
26
- <div id="project-navigation">
27
- <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
- <h2>
29
- <a href="./index.html" rel="home">Home</a>
30
- </h2>
31
-
32
- <div id="table-of-contents-navigation">
33
- <a href="./table_of_contents.html#pages">Pages</a>
34
- <a href="./table_of_contents.html#classes">Classes</a>
35
- <a href="./table_of_contents.html#methods">Methods</a>
36
- </div>
37
- </div>
38
-
39
- <div id="search-section" role="search" class="project-section initially-hidden">
40
- <form action="#" method="get" accept-charset="utf-8">
41
- <div id="search-field-wrapper">
42
- <input id="search-field" role="combobox" aria-label="Search"
43
- aria-autocomplete="list" aria-controls="search-results"
44
- type="text" name="search" placeholder="Search" spellcheck="false"
45
- title="Type to search, Up and Down to navigate, Enter to load">
46
- </div>
47
-
48
- <ul id="search-results" aria-label="Search Results"
49
- aria-busy="false" aria-expanded="false"
50
- aria-atomic="false" class="initially-hidden"></ul>
51
- </form>
52
- </div>
53
-
54
- </div>
55
-
56
-
57
-
58
- <div id="class-metadata">
59
-
60
-
61
-
62
-
63
-
64
- </div>
65
- </nav>
66
-
67
- <main role="main" aria-labelledby="module-DNSBL">
68
- <h1 id="module-DNSBL" class="module">
69
- module DNSBL
70
- </h1>
71
-
72
- <section class="description">
73
-
74
- </section>
75
-
76
-
77
-
78
-
79
- <section id="5Buntitled-5D" class="documentation-section">
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
- </section>
90
- </main>
91
-
92
-
93
- <footer id="validator-badges" role="contentinfo">
94
- <p><a href="http://validator.w3.org/check/referer">Validate</a>
95
- <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.
96
- <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
97
- </footer>
98
-
@@ -1,646 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta charset="UTF-8">
6
-
7
- <title>class DNSBL::Client - RDoc Documentation</title>
8
-
9
- <link href="../fonts.css" rel="stylesheet">
10
- <link href="../rdoc.css" rel="stylesheet">
11
-
12
- <script type="text/javascript">
13
- var rdoc_rel_prefix = "../";
14
- </script>
15
-
16
- <script src="../js/jquery.js"></script>
17
- <script src="../js/navigation.js"></script>
18
- <script src="../js/search_index.js"></script>
19
- <script src="../js/search.js"></script>
20
- <script src="../js/searcher.js"></script>
21
- <script src="../js/darkfish.js"></script>
22
-
23
-
24
- <body id="top" role="document" class="class">
25
- <nav role="navigation">
26
- <div id="project-navigation">
27
- <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
- <h2>
29
- <a href="../index.html" rel="home">Home</a>
30
- </h2>
31
-
32
- <div id="table-of-contents-navigation">
33
- <a href="../table_of_contents.html#pages">Pages</a>
34
- <a href="../table_of_contents.html#classes">Classes</a>
35
- <a href="../table_of_contents.html#methods">Methods</a>
36
- </div>
37
- </div>
38
-
39
- <div id="search-section" role="search" class="project-section initially-hidden">
40
- <form action="#" method="get" accept-charset="utf-8">
41
- <div id="search-field-wrapper">
42
- <input id="search-field" role="combobox" aria-label="Search"
43
- aria-autocomplete="list" aria-controls="search-results"
44
- type="text" name="search" placeholder="Search" spellcheck="false"
45
- title="Type to search, Up and Down to navigate, Enter to load">
46
- </div>
47
-
48
- <ul id="search-results" aria-label="Search Results"
49
- aria-busy="false" aria-expanded="false"
50
- aria-atomic="false" class="initially-hidden"></ul>
51
- </form>
52
- </div>
53
-
54
- </div>
55
-
56
-
57
-
58
- <div id="class-metadata">
59
-
60
- <div id="parent-class-section" class="nav-section">
61
- <h3>Parent</h3>
62
-
63
-
64
- <p class="link">Object
65
-
66
- </div>
67
-
68
-
69
-
70
- <!-- Method Quickref -->
71
- <div id="method-list-section" class="nav-section">
72
- <h3>Methods</h3>
73
-
74
- <ul class="link-list" role="directory">
75
-
76
- <li ><a href="#method-c-new">::new</a>
77
-
78
- <li ><a href="#method-i-__phpot_decoder">#__phpot_decoder</a>
79
-
80
- <li ><a href="#method-i-_decode_response">#_decode_response</a>
81
-
82
- <li ><a href="#method-i-_encode_query">#_encode_query</a>
83
-
84
- <li ><a href="#method-i-add_dnsbl">#add_dnsbl</a>
85
-
86
- <li ><a href="#method-i-dnsbls">#dnsbls</a>
87
-
88
- <li ><a href="#method-i-lookup">#lookup</a>
89
-
90
- <li ><a href="#method-i-nameservers-3D">#nameservers=</a>
91
-
92
- <li ><a href="#method-i-normalize">#normalize</a>
93
-
94
- </ul>
95
- </div>
96
-
97
- </div>
98
- </nav>
99
-
100
- <main role="main" aria-labelledby="class-DNSBL::Client">
101
- <h1 id="class-DNSBL::Client" class="class">
102
- class DNSBL::Client
103
- </h1>
104
-
105
- <section class="description">
106
-
107
- <p><a href="Client.html">Client</a> actually handles the sending of queries to
108
- a recursive DNS server and places any replies into DNSBLResults</p>
109
-
110
- </section>
111
-
112
-
113
-
114
-
115
- <section id="5Buntitled-5D" class="documentation-section">
116
-
117
-
118
-
119
-
120
-
121
- <section class="constants-list">
122
- <header>
123
- <h3>Constants</h3>
124
- </header>
125
- <dl>
126
-
127
- <dt id="VERSION">VERSION
128
-
129
- <dd><p>Current version of the dnsbl-client gem</p>
130
-
131
-
132
- </dl>
133
- </section>
134
-
135
-
136
-
137
-
138
-
139
- <section id="public-class-5Buntitled-5D-method-details" class="method-section">
140
- <header>
141
- <h3>Public Class Methods</h3>
142
- </header>
143
-
144
-
145
- <div id="method-c-new" class="method-detail ">
146
-
147
- <div class="method-heading">
148
- <span class="method-name">new</span><span
149
- class="method-args">(config = YAML.load(File.open(File.expand_path('../../../data', __FILE__)+"/dnsbl.yaml").read), two_level_tldfile = File.expand_path('../../../data', __FILE__)+"/two-level-tlds", three_level_tldfile = File.expand_path('../../../data', __FILE__)+"/three-level-tlds")</span>
150
-
151
- <span class="method-click-advice">click to toggle source</span>
152
-
153
- </div>
154
-
155
-
156
- <div class="method-description">
157
-
158
- <p>initialize a new <a href="Client.html">DNSBL::Client</a> object the config
159
- file automatically points to a YAML file containing the list of DNSBLs and
160
- their return codes the two-level-tlds file lists most of the two level
161
- tlds, needed for hostname to domain normalization</p>
162
-
163
-
164
-
165
-
166
- <div class="method-source-code" id="new-source">
167
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 40</span>
168
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">config</span> = <span class="ruby-constant">YAML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-string">&#39;../../../data&#39;</span>, <span class="ruby-keyword">__FILE__</span>)<span class="ruby-operator">+</span><span class="ruby-string">&quot;/dnsbl.yaml&quot;</span>).<span class="ruby-identifier">read</span>),
169
- <span class="ruby-identifier">two_level_tldfile</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-string">&#39;../../../data&#39;</span>, <span class="ruby-keyword">__FILE__</span>)<span class="ruby-operator">+</span><span class="ruby-string">&quot;/two-level-tlds&quot;</span>,
170
- <span class="ruby-identifier">three_level_tldfile</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-string">&#39;../../../data&#39;</span>, <span class="ruby-keyword">__FILE__</span>)<span class="ruby-operator">+</span><span class="ruby-string">&quot;/three-level-tlds&quot;</span>)
171
- <span class="ruby-ivar">@dnsbls</span> = <span class="ruby-identifier">config</span>
172
- <span class="ruby-ivar">@two_level_tld</span> = []
173
- <span class="ruby-ivar">@three_level_tld</span> = []
174
- <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">two_level_tldfile</span>).<span class="ruby-identifier">readlines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span>
175
- <span class="ruby-ivar">@two_level_tld</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">strip</span>
176
- <span class="ruby-keyword">end</span>
177
- <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">three_level_tldfile</span>).<span class="ruby-identifier">readlines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span>
178
- <span class="ruby-ivar">@three_level_tld</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">strip</span>
179
- <span class="ruby-keyword">end</span>
180
- <span class="ruby-ivar">@sockets</span> = []
181
- <span class="ruby-identifier">config</span> = <span class="ruby-constant">Resolv</span><span class="ruby-operator">::</span><span class="ruby-constant">DNS</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">new</span>
182
- <span class="ruby-identifier">config</span>.<span class="ruby-identifier">nameservers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ip</span>,<span class="ruby-identifier">port</span><span class="ruby-operator">|</span>
183
- <span class="ruby-identifier">sock</span> = <span class="ruby-constant">UDPSocket</span>.<span class="ruby-identifier">new</span>
184
- <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-identifier">ip</span>,<span class="ruby-identifier">port</span>)
185
- <span class="ruby-ivar">@sockets</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">sock</span>
186
- <span class="ruby-keyword">break</span> <span class="ruby-comment"># let&#39;s just the first nameserver in this version of the library</span>
187
- <span class="ruby-keyword">end</span>
188
- <span class="ruby-ivar">@socket_index</span> = <span class="ruby-value">0</span>
189
- <span class="ruby-keyword">end</span></pre>
190
- </div>
191
-
192
- </div>
193
-
194
-
195
-
196
-
197
- </div>
198
-
199
-
200
- </section>
201
-
202
- <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
203
- <header>
204
- <h3>Public Instance Methods</h3>
205
- </header>
206
-
207
-
208
- <div id="method-i-_encode_query" class="method-detail ">
209
-
210
- <div class="method-heading">
211
- <span class="method-name">_encode_query</span><span
212
- class="method-args">(item,itemtype,domain,apikey=nil)</span>
213
-
214
- <span class="method-click-advice">click to toggle source</span>
215
-
216
- </div>
217
-
218
-
219
- <div class="method-description">
220
-
221
- <p>converts an ip or a hostname into the DNS query packet requires to lookup
222
- the result</p>
223
-
224
-
225
-
226
-
227
- <div class="method-source-code" id="_encode_query-source">
228
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 108</span>
229
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">_encode_query</span>(<span class="ruby-identifier">item</span>,<span class="ruby-identifier">itemtype</span>,<span class="ruby-identifier">domain</span>,<span class="ruby-identifier">apikey</span>=<span class="ruby-keyword">nil</span>)
230
- <span class="ruby-identifier">label</span> = <span class="ruby-keyword">nil</span>
231
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">itemtype</span> <span class="ruby-operator">==</span> <span class="ruby-string">&#39;ip&#39;</span>
232
- <span class="ruby-identifier">label</span> = <span class="ruby-identifier">item</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\./</span>).<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;.&quot;</span>)
233
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">itemtype</span> <span class="ruby-operator">==</span> <span class="ruby-string">&#39;domain&#39;</span>
234
- <span class="ruby-identifier">label</span> = <span class="ruby-identifier">normalize</span>(<span class="ruby-identifier">item</span>)
235
- <span class="ruby-keyword">end</span>
236
- <span class="ruby-identifier">lookup</span> = <span class="ruby-node">&quot;#{label}.#{domain}&quot;</span>
237
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">apikey</span>
238
- <span class="ruby-identifier">lookup</span> = <span class="ruby-node">&quot;#{apikey}.#{lookup}&quot;</span>
239
- <span class="ruby-keyword">end</span>
240
- <span class="ruby-identifier">txid</span> = <span class="ruby-identifier">lookup</span>.<span class="ruby-identifier">sum</span>
241
- <span class="ruby-identifier">message</span> = <span class="ruby-constant">Resolv</span><span class="ruby-operator">::</span><span class="ruby-constant">DNS</span><span class="ruby-operator">::</span><span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">txid</span>)
242
- <span class="ruby-identifier">message</span>.<span class="ruby-identifier">rd</span> = <span class="ruby-value">1</span>
243
- <span class="ruby-identifier">message</span>.<span class="ruby-identifier">add_question</span>(<span class="ruby-identifier">lookup</span>,<span class="ruby-constant">Resolv</span><span class="ruby-operator">::</span><span class="ruby-constant">DNS</span><span class="ruby-operator">::</span><span class="ruby-constant">Resource</span><span class="ruby-operator">::</span><span class="ruby-constant">IN</span><span class="ruby-operator">::</span><span class="ruby-constant">A</span>)
244
- <span class="ruby-identifier">message</span>.<span class="ruby-identifier">encode</span>
245
- <span class="ruby-keyword">end</span></pre>
246
- </div>
247
-
248
- </div>
249
-
250
-
251
-
252
-
253
- </div>
254
-
255
-
256
- <div id="method-i-add_dnsbl" class="method-detail ">
257
-
258
- <div class="method-heading">
259
- <span class="method-name">add_dnsbl</span><span
260
- class="method-args">(name,domain,type='ip',codes={"0"=>"OK","127.0.0.2"=>"Blacklisted"})</span>
261
-
262
- <span class="method-click-advice">click to toggle source</span>
263
-
264
- </div>
265
-
266
-
267
- <div class="method-description">
268
-
269
- <p>allows the adding of a new <a href="../DNSBL.html">DNSBL</a> to the set of
270
- configured DNSBLs</p>
271
-
272
-
273
-
274
-
275
- <div class="method-source-code" id="add_dnsbl-source">
276
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 96</span>
277
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">add_dnsbl</span>(<span class="ruby-identifier">name</span>,<span class="ruby-identifier">domain</span>,<span class="ruby-identifier">type</span>=<span class="ruby-string">&#39;ip&#39;</span>,<span class="ruby-identifier">codes</span>={<span class="ruby-string">&quot;0&quot;</span>=<span class="ruby-operator">&gt;</span><span class="ruby-string">&quot;OK&quot;</span>,<span class="ruby-string">&quot;127.0.0.2&quot;</span>=<span class="ruby-operator">&gt;</span><span class="ruby-string">&quot;Blacklisted&quot;</span>})
278
- <span class="ruby-ivar">@dnsbls</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">codes</span>
279
- <span class="ruby-ivar">@dnsbls</span>[<span class="ruby-identifier">name</span>][<span class="ruby-string">&#39;domain&#39;</span>] = <span class="ruby-identifier">domain</span>
280
- <span class="ruby-ivar">@dnsbls</span>[<span class="ruby-identifier">name</span>][<span class="ruby-string">&#39;type&#39;</span>] = <span class="ruby-identifier">type</span>
281
- <span class="ruby-keyword">end</span></pre>
282
- </div>
283
-
284
- </div>
285
-
286
-
287
-
288
-
289
- </div>
290
-
291
-
292
- <div id="method-i-dnsbls" class="method-detail ">
293
-
294
- <div class="method-heading">
295
- <span class="method-name">dnsbls</span><span
296
- class="method-args">()</span>
297
-
298
- <span class="method-click-advice">click to toggle source</span>
299
-
300
- </div>
301
-
302
-
303
- <div class="method-description">
304
-
305
- <p>returns a list of <a href="../DNSBL.html">DNSBL</a> names currently
306
- configured</p>
307
-
308
-
309
-
310
-
311
- <div class="method-source-code" id="dnsbls-source">
312
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 103</span>
313
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">dnsbls</span>
314
- <span class="ruby-ivar">@dnsbls</span>.<span class="ruby-identifier">keys</span>
315
- <span class="ruby-keyword">end</span></pre>
316
- </div>
317
-
318
- </div>
319
-
320
-
321
-
322
-
323
- </div>
324
-
325
-
326
- <div id="method-i-lookup" class="method-detail ">
327
-
328
- <div class="method-heading">
329
- <span class="method-name">lookup</span><span
330
- class="method-args">(item)</span>
331
-
332
- <span class="method-click-advice">click to toggle source</span>
333
-
334
- </div>
335
-
336
-
337
- <div class="method-description">
338
-
339
- <p>lookup performs the sending of DNS queries for the given items returns an
340
- array of <a href="DNSBLResult.html">DNSBLResult</a></p>
341
-
342
-
343
-
344
-
345
- <div class="method-source-code" id="lookup-source">
346
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 129</span>
347
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">lookup</span>(<span class="ruby-identifier">item</span>)
348
- <span class="ruby-comment"># if item is an array, use it, otherwise make it one</span>
349
- <span class="ruby-identifier">items</span> = <span class="ruby-identifier">item</span>
350
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">item</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">String</span>
351
- <span class="ruby-identifier">items</span> = [<span class="ruby-identifier">item</span>]
352
- <span class="ruby-keyword">end</span>
353
- <span class="ruby-comment"># place the results in the results array</span>
354
- <span class="ruby-identifier">results</span> = []
355
- <span class="ruby-comment"># for each ip or hostname</span>
356
- <span class="ruby-identifier">items</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">item</span><span class="ruby-operator">|</span>
357
- <span class="ruby-comment"># sent is used to determine when we have all the answers</span>
358
- <span class="ruby-identifier">sent</span> = <span class="ruby-value">0</span>
359
- <span class="ruby-comment"># record the start time</span>
360
- <span class="ruby-ivar">@starttime</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">to_f</span>
361
- <span class="ruby-comment"># determine the type of query</span>
362
- <span class="ruby-identifier">itemtype</span> = (<span class="ruby-identifier">item</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/</span>) <span class="ruby-operator">?</span> <span class="ruby-string">&#39;ip&#39;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&#39;domain&#39;</span>
363
- <span class="ruby-comment"># for each dnsbl that supports our type, create the DNS query packet and send it</span>
364
- <span class="ruby-comment"># rotate across our configured name servers and increment sent</span>
365
- <span class="ruby-ivar">@dnsbls</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>,<span class="ruby-identifier">config</span><span class="ruby-operator">|</span>
366
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;disabled&#39;</span>]
367
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;type&#39;</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">itemtype</span>
368
- <span class="ruby-keyword">begin</span>
369
- <span class="ruby-identifier">msg</span> = <span class="ruby-identifier">_encode_query</span>(<span class="ruby-identifier">item</span>,<span class="ruby-identifier">itemtype</span>,<span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;domain&#39;</span>],<span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;apikey&#39;</span>])
370
- <span class="ruby-ivar">@sockets</span>[<span class="ruby-ivar">@socket_index</span>].<span class="ruby-identifier">send</span>(<span class="ruby-identifier">msg</span>,<span class="ruby-value">0</span>)
371
- <span class="ruby-ivar">@socket_index</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
372
- <span class="ruby-ivar">@socket_index</span> <span class="ruby-operator">=</span> <span class="ruby-ivar">@sockets</span>.<span class="ruby-identifier">length</span>
373
- <span class="ruby-identifier">sent</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
374
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
375
- <span class="ruby-identifier">puts</span> <span class="ruby-identifier">e</span>
376
- <span class="ruby-identifier">puts</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
377
- <span class="ruby-keyword">end</span>
378
- <span class="ruby-keyword">end</span>
379
- <span class="ruby-comment"># while we still expect answers</span>
380
- <span class="ruby-keyword">while</span> <span class="ruby-identifier">sent</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
381
- <span class="ruby-comment"># wait on the socket for maximally 1.5 seconds</span>
382
- <span class="ruby-identifier">r</span>,<span class="ruby-identifier">_</span>,<span class="ruby-identifier">_</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">select</span>(<span class="ruby-ivar">@sockets</span>,<span class="ruby-keyword">nil</span>,<span class="ruby-keyword">nil</span>,<span class="ruby-value">1.5</span>)
383
- <span class="ruby-comment"># if we time out, break out of the loop</span>
384
- <span class="ruby-keyword">break</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">r</span>
385
- <span class="ruby-comment"># for each reply, decode it and receive results, decrement the pending answers</span>
386
- <span class="ruby-identifier">r</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
387
- <span class="ruby-keyword">begin</span>
388
- <span class="ruby-identifier">response</span> = <span class="ruby-identifier">_decode_response</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">recv</span>(<span class="ruby-value">4096</span>))
389
- <span class="ruby-identifier">results</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">response</span>
390
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
391
- <span class="ruby-identifier">puts</span> <span class="ruby-identifier">e</span>
392
- <span class="ruby-identifier">puts</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
393
- <span class="ruby-keyword">end</span>
394
- <span class="ruby-identifier">sent</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
395
- <span class="ruby-keyword">end</span>
396
- <span class="ruby-keyword">end</span>
397
- <span class="ruby-keyword">end</span>
398
- <span class="ruby-identifier">results</span>
399
- <span class="ruby-keyword">end</span></pre>
400
- </div>
401
-
402
- </div>
403
-
404
-
405
-
406
-
407
- </div>
408
-
409
-
410
- <div id="method-i-nameservers-3D" class="method-detail ">
411
-
412
- <div class="method-heading">
413
- <span class="method-name">nameservers=</span><span
414
- class="method-args">(ns=Resolv::DNS::Config.new.nameservers)</span>
415
-
416
- <span class="method-click-advice">click to toggle source</span>
417
-
418
- </div>
419
-
420
-
421
- <div class="method-description">
422
-
423
- <p>sets the nameservers used for performing DNS lookups in round-robin fashion</p>
424
-
425
-
426
-
427
-
428
- <div class="method-source-code" id="nameservers-3D-source">
429
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 64</span>
430
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">nameservers=</span>(<span class="ruby-identifier">ns</span>=<span class="ruby-constant">Resolv</span><span class="ruby-operator">::</span><span class="ruby-constant">DNS</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">new</span>.<span class="ruby-identifier">nameservers</span>)
431
- <span class="ruby-ivar">@sockets</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
432
- <span class="ruby-identifier">s</span>.<span class="ruby-identifier">close</span>
433
- <span class="ruby-keyword">end</span>
434
- <span class="ruby-ivar">@sockets</span> = []
435
- <span class="ruby-identifier">ns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ip</span>,<span class="ruby-identifier">port</span><span class="ruby-operator">|</span>
436
- <span class="ruby-identifier">sock</span> = <span class="ruby-constant">UDPSocket</span>.<span class="ruby-identifier">new</span>
437
- <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-identifier">ip</span>,<span class="ruby-identifier">port</span>)
438
- <span class="ruby-ivar">@sockets</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">sock</span>
439
- <span class="ruby-keyword">break</span> <span class="ruby-comment"># let&#39;s just the first nameserver in this version of the library</span>
440
- <span class="ruby-keyword">end</span>
441
- <span class="ruby-ivar">@socket_index</span> = <span class="ruby-value">0</span>
442
- <span class="ruby-keyword">end</span></pre>
443
- </div>
444
-
445
- </div>
446
-
447
-
448
-
449
-
450
- </div>
451
-
452
-
453
- <div id="method-i-normalize" class="method-detail ">
454
-
455
- <div class="method-heading">
456
- <span class="method-name">normalize</span><span
457
- class="method-args">(domain)</span>
458
-
459
- <span class="method-click-advice">click to toggle source</span>
460
-
461
- </div>
462
-
463
-
464
- <div class="method-description">
465
-
466
- <p>Converts a hostname to the domain: e.g., <a
467
- href="www.google.com">www.google.com</a> =&gt; google.com,
468
- science.somewhere.co.uk =&gt; somewhere.co.uk</p>
469
-
470
-
471
-
472
-
473
- <div class="method-source-code" id="normalize-source">
474
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 79</span>
475
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">normalize</span>(<span class="ruby-identifier">domain</span>)
476
- <span class="ruby-comment"># strip off the protocol (\w{1,20}://), the URI (/), parameters (?), port number (:), and username (.*@)</span>
477
- <span class="ruby-comment"># then split into parts via the .</span>
478
- <span class="ruby-identifier">parts</span> = <span class="ruby-identifier">domain</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/^\w{1,20}:\/\//</span>,<span class="ruby-string">&#39;&#39;</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/[\/\?\:].*/</span>,<span class="ruby-string">&#39;&#39;</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/.*?\@/</span>,<span class="ruby-string">&#39;&#39;</span>).<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\./</span>)
479
- <span class="ruby-comment"># grab the last two parts of the domain</span>
480
- <span class="ruby-identifier">dom</span> = <span class="ruby-identifier">parts</span>[<span class="ruby-value">-2</span>,<span class="ruby-value">2</span>].<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;.&quot;</span>)
481
- <span class="ruby-comment"># if the dom is in the two_level_tld list, then use three parts</span>
482
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@two_level_tld</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">dom</span>)
483
- <span class="ruby-identifier">dom</span> = <span class="ruby-identifier">parts</span>[<span class="ruby-value">-3</span>,<span class="ruby-value">3</span>].<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;.&quot;</span>)
484
- <span class="ruby-keyword">end</span>
485
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@three_level_tld</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">dom</span>)
486
- <span class="ruby-identifier">dom</span> = <span class="ruby-identifier">parts</span>[<span class="ruby-value">-4</span>,<span class="ruby-value">4</span>].<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;.&quot;</span>)
487
- <span class="ruby-keyword">end</span>
488
- <span class="ruby-identifier">dom</span>
489
- <span class="ruby-keyword">end</span></pre>
490
- </div>
491
-
492
- </div>
493
-
494
-
495
-
496
-
497
- </div>
498
-
499
-
500
- </section>
501
-
502
- <section id="private-instance-5Buntitled-5D-method-details" class="method-section">
503
- <header>
504
- <h3>Private Instance Methods</h3>
505
- </header>
506
-
507
-
508
- <div id="method-i-__phpot_decoder" class="method-detail ">
509
-
510
- <div class="method-heading">
511
- <span class="method-name">__phpot_decoder</span><span
512
- class="method-args">(ip)</span>
513
-
514
- <span class="method-click-advice">click to toggle source</span>
515
-
516
- </div>
517
-
518
-
519
- <div class="method-description">
520
-
521
- <p>decodes the response from Project Honey Pot&#39;s service</p>
522
-
523
-
524
-
525
-
526
- <div class="method-source-code" id="__phpot_decoder-source">
527
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 222</span>
528
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">__phpot_decoder</span>(<span class="ruby-identifier">ip</span>)
529
- <span class="ruby-identifier">octets</span> = <span class="ruby-identifier">ip</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\./</span>)
530
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">octets</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-value">4</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">octets</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-string">&quot;127&quot;</span>
531
- <span class="ruby-keyword">return</span> <span class="ruby-string">&quot;invalid response&quot;</span>
532
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">octets</span>[<span class="ruby-value">3</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;0&quot;</span>
533
- <span class="ruby-identifier">search_engines</span> = [<span class="ruby-string">&quot;undocumented&quot;</span>, <span class="ruby-string">&quot;AltaVista&quot;</span>, <span class="ruby-string">&quot;Ask&quot;</span>, <span class="ruby-string">&quot;Baidu&quot;</span>, <span class="ruby-string">&quot;Excite&quot;</span>, <span class="ruby-string">&quot;Google&quot;</span>, <span class="ruby-string">&quot;Looksmart&quot;</span>, <span class="ruby-string">&quot;Lycos&quot;</span>, <span class="ruby-string">&quot;MSN&quot;</span>, <span class="ruby-string">&quot;Yahoo&quot;</span>, <span class="ruby-string">&quot;Cuil&quot;</span>, <span class="ruby-string">&quot;InfoSeek&quot;</span>, <span class="ruby-string">&quot;Miscellaneous&quot;</span>]
534
- <span class="ruby-identifier">sindex</span> = <span class="ruby-identifier">octets</span>[<span class="ruby-value">2</span>].<span class="ruby-identifier">to_i</span>
535
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">sindex</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">search_engines</span>.<span class="ruby-identifier">length</span>
536
- <span class="ruby-keyword">return</span> <span class="ruby-string">&quot;type=search engine,engine=unknown&quot;</span>
537
- <span class="ruby-keyword">else</span>
538
- <span class="ruby-keyword">return</span> <span class="ruby-node">&quot;type=search engine,engine=#{search_engines[sindex]}&quot;</span>
539
- <span class="ruby-keyword">end</span>
540
- <span class="ruby-keyword">else</span>
541
- <span class="ruby-identifier">days</span>, <span class="ruby-identifier">threatscore</span>, <span class="ruby-identifier">flags</span> = <span class="ruby-identifier">octets</span>[<span class="ruby-value">1</span>,<span class="ruby-value">3</span>]
542
- <span class="ruby-identifier">flags</span> = <span class="ruby-identifier">flags</span>.<span class="ruby-identifier">to_i</span>
543
- <span class="ruby-identifier">types</span> = []
544
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">flags</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0x1</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0x1</span>
545
- <span class="ruby-identifier">types</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;suspicious&quot;</span>
546
- <span class="ruby-keyword">end</span>
547
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">flags</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0x2</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0x2</span>
548
- <span class="ruby-identifier">types</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;harvester&quot;</span>
549
- <span class="ruby-keyword">end</span>
550
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">flags</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0x4</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0x4</span>
551
- <span class="ruby-identifier">types</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;comment spammer&quot;</span>
552
- <span class="ruby-keyword">end</span>
553
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">flags</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0xf8</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
554
- <span class="ruby-identifier">types</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;reserved&quot;</span>
555
- <span class="ruby-keyword">end</span>
556
- <span class="ruby-identifier">type</span> = <span class="ruby-identifier">types</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;,&quot;</span>)
557
- <span class="ruby-keyword">return</span> <span class="ruby-node">&quot;days=#{days},score=#{threatscore},type=#{type}&quot;</span>
558
- <span class="ruby-keyword">end</span>
559
- <span class="ruby-keyword">end</span></pre>
560
- </div>
561
-
562
- </div>
563
-
564
-
565
-
566
-
567
- </div>
568
-
569
-
570
- <div id="method-i-_decode_response" class="method-detail ">
571
-
572
- <div class="method-heading">
573
- <span class="method-name">_decode_response</span><span
574
- class="method-args">(buf)</span>
575
-
576
- <span class="method-click-advice">click to toggle source</span>
577
-
578
- </div>
579
-
580
-
581
- <div class="method-description">
582
-
583
- <p>takes a DNS response and converts it into a <a
584
- href="DNSBLResult.html">DNSBLResult</a></p>
585
-
586
-
587
-
588
-
589
- <div class="method-source-code" id="_decode_response-source">
590
- <pre><span class="ruby-comment"># File lib/dnsbl/client.rb, line 186</span>
591
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">_decode_response</span>(<span class="ruby-identifier">buf</span>)
592
- <span class="ruby-identifier">reply</span> = <span class="ruby-constant">Resolv</span><span class="ruby-operator">::</span><span class="ruby-constant">DNS</span><span class="ruby-operator">::</span><span class="ruby-constant">Message</span>.<span class="ruby-identifier">decode</span>(<span class="ruby-identifier">buf</span>)
593
- <span class="ruby-identifier">results</span> = []
594
- <span class="ruby-identifier">reply</span>.<span class="ruby-identifier">each_answer</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>,<span class="ruby-identifier">ttl</span>,<span class="ruby-identifier">data</span><span class="ruby-operator">|</span>
595
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(.+)$/</span>
596
- <span class="ruby-identifier">ip</span> = [<span class="ruby-node">$4</span>,<span class="ruby-node">$3</span>,<span class="ruby-node">$2</span>,<span class="ruby-node">$1</span>].<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;.&quot;</span>)
597
- <span class="ruby-identifier">domain</span> = <span class="ruby-node">$5</span>
598
- <span class="ruby-ivar">@dnsbls</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dnsblname</span>, <span class="ruby-identifier">config</span><span class="ruby-operator">|</span>
599
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Resolv</span><span class="ruby-operator">::</span><span class="ruby-constant">DNS</span><span class="ruby-operator">::</span><span class="ruby-constant">Resource</span><span class="ruby-operator">::</span><span class="ruby-constant">IN</span><span class="ruby-operator">::</span><span class="ruby-constant">A</span>
600
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">domain</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;domain&#39;</span>]
601
- <span class="ruby-identifier">meaning</span> = <span class="ruby-identifier">config</span>[<span class="ruby-identifier">data</span>.<span class="ruby-identifier">address</span>.<span class="ruby-identifier">to_s</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">address</span>.<span class="ruby-identifier">to_s</span>
602
- <span class="ruby-identifier">results</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">DNSBLResult</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">dnsblname</span>, <span class="ruby-identifier">ip</span>, <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">data</span>.<span class="ruby-identifier">address</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">meaning</span>, <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@starttime</span>)
603
- <span class="ruby-keyword">break</span>
604
- <span class="ruby-keyword">end</span>
605
- <span class="ruby-keyword">end</span>
606
- <span class="ruby-keyword">else</span>
607
- <span class="ruby-ivar">@dnsbls</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dnsblname</span>, <span class="ruby-identifier">config</span><span class="ruby-operator">|</span>
608
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">end_with?</span>(<span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;domain&#39;</span>])
609
- <span class="ruby-identifier">meaning</span> = <span class="ruby-keyword">nil</span>
610
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;decoder&#39;</span>]
611
- <span class="ruby-identifier">meaning</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">send</span>((<span class="ruby-string">&quot;__&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;decoder&#39;</span>]).<span class="ruby-identifier">to_sym</span>, <span class="ruby-identifier">data</span>.<span class="ruby-identifier">address</span>.<span class="ruby-identifier">to_s</span>)
612
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">config</span>[<span class="ruby-identifier">data</span>.<span class="ruby-identifier">address</span>.<span class="ruby-identifier">to_s</span>]
613
- <span class="ruby-identifier">meaning</span> = <span class="ruby-identifier">config</span>[<span class="ruby-identifier">data</span>.<span class="ruby-identifier">address</span>.<span class="ruby-identifier">to_s</span>]
614
- <span class="ruby-keyword">else</span>
615
- <span class="ruby-identifier">meaning</span> = <span class="ruby-identifier">data</span>.<span class="ruby-identifier">address</span>.<span class="ruby-identifier">to_s</span>
616
- <span class="ruby-keyword">end</span>
617
- <span class="ruby-identifier">results</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">DNSBLResult</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">dnsblname</span>, <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;.&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">config</span>[<span class="ruby-string">&#39;domain&#39;</span>],<span class="ruby-string">&#39;&#39;</span>), <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">data</span>.<span class="ruby-identifier">address</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">meaning</span>, <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@starttime</span>)
618
- <span class="ruby-keyword">break</span>
619
- <span class="ruby-keyword">end</span>
620
- <span class="ruby-keyword">end</span>
621
- <span class="ruby-keyword">end</span>
622
- <span class="ruby-keyword">end</span>
623
- <span class="ruby-identifier">results</span>
624
- <span class="ruby-keyword">end</span></pre>
625
- </div>
626
-
627
- </div>
628
-
629
-
630
-
631
-
632
- </div>
633
-
634
-
635
- </section>
636
-
637
- </section>
638
- </main>
639
-
640
-
641
- <footer id="validator-badges" role="contentinfo">
642
- <p><a href="http://validator.w3.org/check/referer">Validate</a>
643
- <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.
644
- <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
645
- </footer>
646
-