dnstraverse 0.0.1 → 0.1.0

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.
Files changed (139) hide show
  1. data/Rakefile +61 -18
  2. data/bin/dnstraverse +30 -57
  3. data/lib/dnstraverse/caching_resolver.rb +2 -4
  4. data/lib/dnstraverse/decoded_query.rb +1 -0
  5. data/lib/dnstraverse/fingerprint.rb +1 -3
  6. data/lib/dnstraverse/fingerprint_rules.rb +249 -224
  7. data/lib/dnstraverse/message_utility.rb +20 -15
  8. data/lib/dnstraverse/referral.rb +32 -12
  9. data/lib/dnstraverse/response.rb +3 -1
  10. data/lib/dnstraverse/summary_stats.rb +94 -0
  11. data/lib/dnstraverse/traverser.rb +20 -20
  12. data/lib/dnstraverse/version.rb +8 -0
  13. metadata +101 -180
  14. data/a +0 -44
  15. data/doc.tar +0 -0
  16. data/doc/classes/DNSTraverse.html +0 -198
  17. data/doc/classes/DNSTraverse/CachingResolver.html +0 -172
  18. data/doc/classes/DNSTraverse/CachingResolver.src/M000055.html +0 -21
  19. data/doc/classes/DNSTraverse/CachingResolver.src/M000056.html +0 -42
  20. data/doc/classes/DNSTraverse/DecodedQuery.html +0 -475
  21. data/doc/classes/DNSTraverse/DecodedQuery.src/M000020.html +0 -34
  22. data/doc/classes/DNSTraverse/DecodedQuery.src/M000021.html +0 -23
  23. data/doc/classes/DNSTraverse/DecodedQuery.src/M000022.html +0 -19
  24. data/doc/classes/DNSTraverse/DecodedQuery.src/M000023.html +0 -33
  25. data/doc/classes/DNSTraverse/DecodedQuery.src/M000024.html +0 -26
  26. data/doc/classes/DNSTraverse/DecodedQuery.src/M000025.html +0 -24
  27. data/doc/classes/DNSTraverse/DecodedQuery.src/M000026.html +0 -29
  28. data/doc/classes/DNSTraverse/DecodedQuery.src/M000027.html +0 -19
  29. data/doc/classes/DNSTraverse/DecodedQuery.src/M000028.html +0 -18
  30. data/doc/classes/DNSTraverse/DecodedQuery.src/M000029.html +0 -32
  31. data/doc/classes/DNSTraverse/DecodedQuery.src/M000030.html +0 -19
  32. data/doc/classes/DNSTraverse/DecodedQuery.src/M000031.html +0 -19
  33. data/doc/classes/DNSTraverse/DecodedQuery.src/M000032.html +0 -20
  34. data/doc/classes/DNSTraverse/DecodedQuery.src/M000033.html +0 -31
  35. data/doc/classes/DNSTraverse/DecodedQueryCache.html +0 -182
  36. data/doc/classes/DNSTraverse/DecodedQueryCache.src/M000063.html +0 -21
  37. data/doc/classes/DNSTraverse/DecodedQueryCache.src/M000064.html +0 -33
  38. data/doc/classes/DNSTraverse/Fingerprint.html +0 -277
  39. data/doc/classes/DNSTraverse/Fingerprint.src/M000047.html +0 -29
  40. data/doc/classes/DNSTraverse/Fingerprint.src/M000048.html +0 -18
  41. data/doc/classes/DNSTraverse/Fingerprint.src/M000049.html +0 -57
  42. data/doc/classes/DNSTraverse/Fingerprint.src/M000050.html +0 -28
  43. data/doc/classes/DNSTraverse/Fingerprint.src/M000051.html +0 -27
  44. data/doc/classes/DNSTraverse/Fingerprint.src/M000052.html +0 -35
  45. data/doc/classes/DNSTraverse/Fingerprint.src/M000053.html +0 -24
  46. data/doc/classes/DNSTraverse/Fingerprint.src/M000054.html +0 -29
  47. data/doc/classes/DNSTraverse/InfoCache.html +0 -235
  48. data/doc/classes/DNSTraverse/InfoCache.src/M000034.html +0 -20
  49. data/doc/classes/DNSTraverse/InfoCache.src/M000035.html +0 -23
  50. data/doc/classes/DNSTraverse/InfoCache.src/M000036.html +0 -28
  51. data/doc/classes/DNSTraverse/InfoCache.src/M000037.html +0 -25
  52. data/doc/classes/DNSTraverse/InfoCache.src/M000038.html +0 -27
  53. data/doc/classes/DNSTraverse/InfoCache.src/M000039.html +0 -33
  54. data/doc/classes/DNSTraverse/MessageUtility.html +0 -275
  55. data/doc/classes/DNSTraverse/MessageUtility.src/M000011.html +0 -35
  56. data/doc/classes/DNSTraverse/MessageUtility.src/M000012.html +0 -37
  57. data/doc/classes/DNSTraverse/MessageUtility.src/M000013.html +0 -28
  58. data/doc/classes/DNSTraverse/MessageUtility.src/M000014.html +0 -27
  59. data/doc/classes/DNSTraverse/MessageUtility.src/M000015.html +0 -30
  60. data/doc/classes/DNSTraverse/MessageUtility.src/M000016.html +0 -32
  61. data/doc/classes/DNSTraverse/MessageUtility.src/M000017.html +0 -34
  62. data/doc/classes/DNSTraverse/MessageUtility.src/M000018.html +0 -23
  63. data/doc/classes/DNSTraverse/MessageUtility.src/M000019.html +0 -36
  64. data/doc/classes/DNSTraverse/Referral.html +0 -641
  65. data/doc/classes/DNSTraverse/Referral.src/M000065.html +0 -22
  66. data/doc/classes/DNSTraverse/Referral.src/M000066.html +0 -21
  67. data/doc/classes/DNSTraverse/Referral.src/M000067.html +0 -23
  68. data/doc/classes/DNSTraverse/Referral.src/M000068.html +0 -19
  69. data/doc/classes/DNSTraverse/Referral.src/M000069.html +0 -18
  70. data/doc/classes/DNSTraverse/Referral.src/M000070.html +0 -54
  71. data/doc/classes/DNSTraverse/Referral.src/M000071.html +0 -25
  72. data/doc/classes/DNSTraverse/Referral.src/M000072.html +0 -27
  73. data/doc/classes/DNSTraverse/Referral.src/M000073.html +0 -23
  74. data/doc/classes/DNSTraverse/Referral.src/M000074.html +0 -20
  75. data/doc/classes/DNSTraverse/Referral.src/M000075.html +0 -40
  76. data/doc/classes/DNSTraverse/Referral.src/M000076.html +0 -52
  77. data/doc/classes/DNSTraverse/Referral.src/M000077.html +0 -29
  78. data/doc/classes/DNSTraverse/Referral.src/M000078.html +0 -54
  79. data/doc/classes/DNSTraverse/Referral.src/M000079.html +0 -18
  80. data/doc/classes/DNSTraverse/Referral.src/M000080.html +0 -22
  81. data/doc/classes/DNSTraverse/Referral.src/M000081.html +0 -20
  82. data/doc/classes/DNSTraverse/Referral.src/M000082.html +0 -29
  83. data/doc/classes/DNSTraverse/Referral.src/M000083.html +0 -28
  84. data/doc/classes/DNSTraverse/Referral.src/M000084.html +0 -29
  85. data/doc/classes/DNSTraverse/Referral.src/M000085.html +0 -55
  86. data/doc/classes/DNSTraverse/Referral.src/M000086.html +0 -30
  87. data/doc/classes/DNSTraverse/Referral.src/M000087.html +0 -24
  88. data/doc/classes/DNSTraverse/Referral.src/M000088.html +0 -20
  89. data/doc/classes/DNSTraverse/Referral.src/M000089.html +0 -58
  90. data/doc/classes/DNSTraverse/ResolveError.html +0 -111
  91. data/doc/classes/DNSTraverse/Response.html +0 -271
  92. data/doc/classes/DNSTraverse/Response.src/M000057.html +0 -27
  93. data/doc/classes/DNSTraverse/Response.src/M000058.html +0 -21
  94. data/doc/classes/DNSTraverse/Response.src/M000059.html +0 -19
  95. data/doc/classes/DNSTraverse/Response.src/M000060.html +0 -21
  96. data/doc/classes/DNSTraverse/Response.src/M000061.html +0 -31
  97. data/doc/classes/DNSTraverse/Response.src/M000062.html +0 -23
  98. data/doc/classes/DNSTraverse/Response/NoGlue.html +0 -222
  99. data/doc/classes/DNSTraverse/Response/NoGlue.src/M000007.html +0 -32
  100. data/doc/classes/DNSTraverse/Response/NoGlue.src/M000008.html +0 -18
  101. data/doc/classes/DNSTraverse/Response/NoGlue.src/M000009.html +0 -18
  102. data/doc/classes/DNSTraverse/Response/NoGlue.src/M000010.html +0 -18
  103. data/doc/classes/DNSTraverse/Traverser.html +0 -247
  104. data/doc/classes/DNSTraverse/Traverser.src/M000040.html +0 -17
  105. data/doc/classes/DNSTraverse/Traverser.src/M000041.html +0 -52
  106. data/doc/classes/DNSTraverse/Traverser.src/M000042.html +0 -61
  107. data/doc/classes/DNSTraverse/Traverser.src/M000043.html +0 -110
  108. data/doc/classes/DNSTraverse/Traverser.src/M000044.html +0 -63
  109. data/doc/classes/DNSTraverse/Traverser.src/M000045.html +0 -28
  110. data/doc/classes/DNSTraverse/Traverser.src/M000046.html +0 -18
  111. data/doc/classes/FingerprintRules.html +0 -175
  112. data/doc/classes/Log.html +0 -174
  113. data/doc/classes/Log.src/M000002.html +0 -18
  114. data/doc/classes/Log.src/M000003.html +0 -18
  115. data/doc/classes/Log.src/M000004.html +0 -18
  116. data/doc/classes/Log/Formatter.html +0 -165
  117. data/doc/classes/Log/Formatter.src/M000005.html +0 -22
  118. data/doc/classes/Log/Formatter.src/M000006.html +0 -24
  119. data/doc/classes/TestFingerprint.html +0 -137
  120. data/doc/classes/TestFingerprint.src/M000001.html +0 -22
  121. data/doc/created.rid +0 -1
  122. data/doc/files/lib/dnstraverse/caching_resolver_rb.html +0 -132
  123. data/doc/files/lib/dnstraverse/decoded_query_cache_rb.html +0 -132
  124. data/doc/files/lib/dnstraverse/decoded_query_rb.html +0 -132
  125. data/doc/files/lib/dnstraverse/fingerprint_rb.html +0 -134
  126. data/doc/files/lib/dnstraverse/fingerprint_rules_rb.html +0 -143
  127. data/doc/files/lib/dnstraverse/info_cache_rb.html +0 -131
  128. data/doc/files/lib/dnstraverse/log_rb.html +0 -131
  129. data/doc/files/lib/dnstraverse/message_utility_rb.html +0 -124
  130. data/doc/files/lib/dnstraverse/referral_rb.html +0 -134
  131. data/doc/files/lib/dnstraverse/response_noglue_rb.html +0 -124
  132. data/doc/files/lib/dnstraverse/response_rb.html +0 -132
  133. data/doc/files/lib/dnstraverse/traverser_rb.html +0 -137
  134. data/doc/files/test/test_fingerprint_rb.html +0 -133
  135. data/doc/fr_class_index.html +0 -43
  136. data/doc/fr_file_index.html +0 -39
  137. data/doc/fr_method_index.html +0 -115
  138. data/doc/index.html +0 -24
  139. data/doc/rdoc-style.css +0 -208
data/Rakefile CHANGED
@@ -1,19 +1,62 @@
1
- require 'rake/gempackagetask'
2
- spec = Gem::Specification.new do |s|
3
- s.name = 'dnstraverse'
4
- s.summary = 'Complete DNS traversal checker'
5
- s.description = File.read(File.join(File.dirname(__FILE__), 'README'))
6
- s.requirements = []
7
- s.version = '0.0.1'
8
- s.author = 'James Ponder'
9
- s.email = 'james@squish.net'
10
- s.homepage = 'http://www.squish.net/dnstraverse/'
11
- s.platform = Gem::Platform::RUBY
12
- s.required_ruby_version = '>=1.8'
13
- s.files = Dir['**/**']
14
- s.executables = [ 'dnstraverse' ]
15
- s.test_files = Dir["test/test*.rb"]
16
- s.has_rdoc = true
17
- s.add_dependency('dnsruby', '>= 1.26')
1
+ # encoding: utf-8
2
+
3
+ require 'lib/dnstraverse/version'
4
+
5
+ require 'rubygems'
6
+ require 'bundler'
7
+ begin
8
+ Bundler.setup(:default, :development)
9
+ rescue Bundler::BundlerError => e
10
+ $stderr.puts e.message
11
+ $stderr.puts "Run `bundle install` to install missing gems"
12
+ exit e.status_code
13
+ end
14
+ require 'rake'
15
+
16
+ require 'jeweler'
17
+ Jeweler::Tasks.new do |gem|
18
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
19
+ gem.name = 'dnstraverse'
20
+ gem.summary = 'Complete DNS traversal checker'
21
+ gem.description = File.read(File.join(File.dirname(__FILE__), 'README'))
22
+ gem.homepage = 'http://www.squish.net/dnstraverse/'
23
+ gem.license = "GPL"
24
+ gem.email = 'james@squish.net'
25
+ gem.authors = ['James Ponder']
26
+ gem.required_ruby_version = '>=1.8'
27
+ gem.version = DNSTraverse::Version::STRING;
28
+ gem.files = FileList["Rakefile", "{bin,generators,lib,test}/**/*"]
29
+ gem.extra_rdoc_files = ['README', 'LICENSE']
30
+ gem.executables = [ 'dnstraverse' ]
31
+ gem.has_rdoc = true
32
+ # gem.test_files = Dir["test/test*.rb"]
33
+ # dependencies defined in Gemfile
34
+ end
35
+ Jeweler::RubygemsDotOrgTasks.new
36
+
37
+ require 'rake/testtask'
38
+ Rake::TestTask.new(:test) do |test|
39
+ test.libs << 'lib' << 'test'
40
+ test.pattern = 'test/**/test_*.rb'
41
+ test.verbose = true
42
+ end
43
+
44
+ #require 'rcov/rcovtask'
45
+ #Rcov::RcovTask.new do |test|
46
+ # test.libs << 'test'
47
+ # test.pattern = 'test/**/test_*.rb'
48
+ # test.verbose = true
49
+ # test.rcov_opts << '--exclude "gems/*"'
50
+ #end
51
+
52
+ task :default => :test
53
+
54
+ require 'rdoc/task'
55
+ RDoc::Task.new do |rdoc|
56
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
57
+
58
+ rdoc.rdoc_dir = 'rdoc'
59
+ rdoc.title = "dnstraverse #{version}"
60
+ rdoc.rdoc_files.include('README*')
61
+ rdoc.rdoc_files.include('lib/**/*.rb')
18
62
  end
19
- Rake::GemPackageTask.new(spec).define
data/bin/dnstraverse CHANGED
@@ -6,34 +6,6 @@
6
6
  #
7
7
  # = Usage
8
8
  # dnstraverse [options] DOMAIN
9
- # -t, --type TYPE Select record type (A, AAAA, SRV, WKS, NS,
10
- # CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, ANY)
11
- # --root-server HOST Root DNS server (default - ask local resolver)
12
- # --[no-]all-root-servers Find all root servers (default false)
13
- # --root-aaaa TODO Look for IPv6 addresses for root servers
14
- # --follow-aaaa TODO Only follow AAAA records for referrals
15
- # --udp-size SIZE Turn on EDNS0 with given UDP size
16
- # --max-depth DEPTH Maximum depth to traverse (default 10)
17
- # --retries TIMES Number of 2s retries before timing out (2)
18
- # --[no-]allow-tcp Try using tcp if udp truncated (default true)
19
- # --[no-]always-tcp Always use tcp (default false)
20
- #
21
- # --[no-]show-progress Display progress information (default true)
22
- # --[no-]show-all-stats Display statistics as we go (default false)
23
- # --[no-]show-resolves Display referral resolutions (default false)
24
- # --[no-]show-serverlist Display list of servers seen (default true)
25
- # --[no-]show-versions Display versions of dns servers (default true)
26
- # --[no-]show-results Display the results (default true)
27
- #
28
- # --fast Short-cut answers using previous information,
29
- # less accurate but usually ok - by-passes the
30
- # proper simulation of the resolver cache.
31
- #
32
- # -v, --[no-]verbose Run verbosely
33
- # -d, --debug Debug mode: One -d for DNSCheck debug
34
- # Two -d also turns on library debug
35
- # -h, --help Show full help
36
- # -V, --version Show version and exit
37
9
  #
38
10
  # == Example
39
11
  # dnstraverse www.nic.uk
@@ -56,8 +28,7 @@ require 'pp'
56
28
  require 'dnstraverse/traverser'
57
29
  require 'dnstraverse/log'
58
30
  require 'dnstraverse/fingerprint'
59
-
60
- Version = [ 0, 0, 1].freeze
31
+ require 'dnstraverse/version'
61
32
 
62
33
  EMPTY_STRING = ''.freeze
63
34
 
@@ -136,7 +107,7 @@ options[:broken] = false
136
107
  options[:progress] = true
137
108
  options[:summary] = true
138
109
  options[:resolves] = false
139
- options[:serverlist] = true
110
+ options[:servers] = false
140
111
  options[:versions] = true
141
112
  options[:domainname] = nil
142
113
  options[:follow_aaaa] = false
@@ -145,36 +116,37 @@ options[:always_tcp] = false
145
116
  options[:allow_tcp] = false
146
117
  options[:allstats] = false
147
118
  options[:saveobjects] = false
148
- options[:fast] = false
149
- options[:udpsize] = 512
150
- options[:maxdepth] = 10
119
+ options[:fast] = true
120
+ options[:udpsize] = 2048
121
+ options[:maxdepth] = 24
151
122
  options[:retries] = 2
152
123
  options[:results] = true
153
124
 
154
125
  opts = OptionParser.new
155
126
  opts.banner = "Usage: #{File.basename($0)} [options] DOMAIN"
156
- opts.on("-v", "--[no-]verbose") { |o| options[:verbose] = o }
157
- opts.on("-d", "--[no-]debug") { |o| options[:debug]+= 1 }
158
- opts.on("-r", "--root-server HOST") { |o| options[:root] = o }
159
- opts.on("-a", "--all-root-servers") { |o| options[:allroots] = o }
160
- opts.on("-t", "--type TYPE", Dnsruby::Types.constants) { |o| options[:type] = o }
161
- opts.on("--udp-size SIZE") { |o| options[:udpsize] = o }
162
- opts.on("--allow-tcp") { |o| options[:allow_tcp] = o }
163
- opts.on("--always-tcp") { |o| options[:always_tcp] = o }
164
- opts.on("--max-depth DEPTH") { |o| options[:maxdepth] = o }
165
- opts.on("--retries TIMES") { |o| options[:retries] = o }
166
- opts.on("--[no-]follow-aaaa") { |o| options[:follow_aaaa] = o }
167
- opts.on("--[no-]root-aaaa") { |o| options[:root_aaaa] = o }
168
- opts.on("--[no-]show-progress") { |o| options[:progress] = o }
169
- opts.on("--[no-]show-resolves") { |o| options[:resolves] = o }
170
- opts.on("--[no-]show-serverlist") { |o| options[:serverlist] = o }
171
- opts.on("--[no-]show-versions") { |o| options[:versions] = o }
172
- opts.on("--[no-]show-all-stats") { |o| options[:allstats] = o }
173
- opts.on("--[no-]show-results") { |o| options[:results] = o }
127
+ opts.on("-v", "--[no-]verbose", "Run verbosely") { |o| options[:verbose] = o }
128
+ opts.on("-d", "--[no-]debug", "Debug mode. Use twice to turn on library debug.") { |o| options[:debug]+= 1 }
129
+ opts.on("-r", "--root-server HOST", "Root DNS server (default - ask local resolver)") { |o| options[:root] = o }
130
+ opts.on("-a", "--all-root-servers", "Find all root servers (default false)") { |o| options[:allroots] = o }
131
+ opts.on("-t", "--type TYPE", Dnsruby::Types.constants,
132
+ "Record type (A, AAAA, SRV, WKS, NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, ANY") { |o| options[:type] = o }
133
+ opts.on("--udp-size SIZE", "UDP packet size (default 2048). Set to 512 to turn off EDNS0.") { |o| options[:udpsize] = o }
134
+ opts.on("--allow-tcp", "Try using tcp if udp truncated (default true)") { |o| options[:allow_tcp] = o }
135
+ opts.on("--always-tcp", "Always use tcp (default false)") { |o| options[:always_tcp] = o }
136
+ opts.on("--max-depth DEPTH", "Maximum traversal depth (default 24)") { |o| options[:maxdepth] = o }
137
+ opts.on("--retries TIMES", "Number of 2s retries before timing out (default 2)") { |o| options[:retries] = o }
138
+ opts.on("--[no-]follow-aaaa", "Only follow AAAA records for referrals (default false)") { |o| options[:follow_aaaa] = o }
139
+ opts.on("--[no-]root-aaaa", "Look for IPv6 addresses for root servers (default false)") { |o| options[:root_aaaa] = o }
140
+ opts.on("--[no-]show-progress", "Display progress information (default true)") { |o| options[:progress] = o }
141
+ opts.on("--[no-]show-resolves", "Display referral resolutions (default false)") { |o| options[:resolves] = o }
142
+ opts.on("--[no-]show-servers", "Display list of servers seen (default false)") { |o| options[:servers] = o }
143
+ opts.on("--[no-]show-versions", "Display versions of dns servers (default true)") { |o| options[:versions] = o }
144
+ opts.on("--[no-]show-all-stats", "Display statistics as we go (default false)") { |o| options[:allstats] = o }
145
+ opts.on("--[no-]show-results", "Display the results (default true)") { |o| options[:results] = o }
174
146
  opts.on("--save-objects") { |o| options[:saveobjects] = o }
175
- opts.on("--fast") { |o| options[:fast] = o }
176
- opts.on_tail("-h", "--help") { RDoc::usage }
177
- opts.on_tail("-V", "--version") { puts Version.join('.'); exit }
147
+ opts.on("--[no-]fast", "Fast mode (default true) turn off to be more accurate" ) { |o| options[:fast] = o }
148
+ opts.on_tail("-h", "--help", "Show full help") { puts opts; exit }
149
+ opts.on_tail("-V", "--version", "Show version") { puts DNSTraverse::Version::STRING; exit }
178
150
  begin
179
151
  opts.parse!
180
152
  if ARGV.size != 1 then
@@ -183,7 +155,8 @@ begin
183
155
  options[:domainname] = ARGV.shift
184
156
  rescue OptionParser::ParseError => e
185
157
  puts e
186
- RDoc::usage(1, 'Usage')
158
+ puts opts
159
+ exit
187
160
  end
188
161
  Log.level = options[:debug] > 0 ? Logger::DEBUG : Logger::UNKNOWN
189
162
  Log.debug {"Options chosen:\n" }
@@ -232,7 +205,7 @@ begin
232
205
  :maxdepth => options[:maxdepth],
233
206
  :retries => options[:retries])
234
207
  puts if options[:progress]
235
- if options[:serverlist] then
208
+ if options[:servers] then
236
209
  puts "The following servers were encountered:"
237
210
  fp = options[:versions] ? DNSTraverse::Fingerprint.new : nil
238
211
  seen = traverser.servers_encountered
@@ -34,7 +34,6 @@ module DNSTraverse
34
34
  @requests+= 1
35
35
  ip = self.config.nameserver[0]
36
36
  udp_size = self.udp_size
37
- self.udp_size = udp_size # workaround for bug in dnsruby
38
37
  Log.debug { "Querying #{name} to #{ip} class #{klass} type #{type}"}
39
38
  key = "key:res:#{ip}:#{name}:#{klass}:#{type}:#{udp_size}"
40
39
  if @cache.has_key?(key) then
@@ -46,9 +45,8 @@ module DNSTraverse
46
45
  begin
47
46
  msg = Dnsruby::Message.new
48
47
  msg.add_question(name, type, klass)
49
- q = Queue.new
50
- send_async(msg, q)
51
- id, result, error = q.pop
48
+ msg.add_additional(Dnsruby::RR::OPT.new(udp_size)) if udp_size > 512
49
+ result, error = send_plain_message(msg)
52
50
  answer = result || error
53
51
  rescue => e
54
52
  answer = RuntimeError.new "Dnsruby failure: " + e.to_s
@@ -30,6 +30,7 @@ module DNSTraverse
30
30
  attr_reader :auth_ns, :auth_soa, :auth_other # authority info
31
31
  attr_reader :exception_message, :error_message # :exception/:error only
32
32
  attr_reader :answers # :answered only
33
+ attr_reader :warnings # warnings about this query
33
34
  attr_reader :authoritynames # auth_ns converted to array of strings
34
35
  # attr_reader :stats_key
35
36
 
@@ -152,9 +152,7 @@ module DNSTraverse
152
152
  msg = Dnsruby::Message.new
153
153
  msg.header = fp2header(headerstr)
154
154
  msg.add_question(decode_query(query))
155
- q = Queue.new
156
- @resolver.send_async(msg, q)
157
- id, result, error = q.pop
155
+ result, error = @resolver.send_plain_message(msg)
158
156
  ans = result || error
159
157
  return nil, FINGERPRINT_TIMEOUT if ans.is_a? Dnsruby::ResolvTimeout
160
158
  return nil, ans.to_s if ans.is_a? Exception
@@ -39,7 +39,7 @@ module FingerprintRules
39
39
  "0,QUERY,0,0,0,0,0,1,NOERROR,0,0,0,0",
40
40
  ].freeze
41
41
 
42
- INITRULE = { :header => QY[0], :query => ". IN A" }.freeze
42
+ INITRULE = { :header => QY[2], :query => ". IN MAILB" }.freeze
43
43
 
44
44
  IQ = [ "1,IQUERY,0,0,1,0,0,0,FORMERR,0,0,0,0", # iq0
45
45
  "1,IQUERY,0,0,1,0,0,0,FORMERR,1,0,0,0", # iq1
@@ -121,7 +121,7 @@ module FingerprintRules
121
121
  "1,QUERY,0,0,1,1,0,0,FORMERR,1,0,0,0",
122
122
  "1,QUERY,0,0,0,1,0,0,SERVFAIL,1,0,0,0",
123
123
  "1,QUERY,0,0,1,1,0,0,NOERROR,1,1,0,0",
124
- "1,IQUERY,1,0,1,0,0,0,NOERROR,1,0,0,0", #iq80
124
+ "1,IQUERY,1,0,1,0,0,0,NOERROR,1,0,1,0", #iq80
125
125
  "1,IQUERY,1,0,1,1,0,0,NOTIMP,1,0,0,0",
126
126
  "1,QUERY,0,0,1,1,0,0,NOERROR,1,0,0,0",
127
127
  "1,QUERY,1,0,1,1,0,0,NOERROR,1,1,1,.+",
@@ -130,260 +130,285 @@ module FingerprintRules
130
130
  "1,QUERY,1,0,0,1,0,0,NXDOMAIN,1,0,0,0",
131
131
  "1,QUERY,0,0,0,1,0,0,NOTIMP,0,0,0,0",
132
132
  "1,QUERY,0,0,0,0,0,0,REFUSED,1,0,0,0",
133
- "1,QUERY,1,0,1,1,0,0,NXDOMAIN,1,0,0,0",
133
+ "1,QUERY,1,0,1,1,0,0,NXDOMAIN,1,0,0,0", #iq89
134
134
  "1,QUERY,1,0,0,0,0,0,NOERROR,1,1,0,0", #iq90
135
135
  "1,IQUERY,1,0,1,1,0,1,NOTIMP,1,0,0,0",
136
136
  "1,QUERY,0,0,0,1,0,0,NOTIMP,1,0,0,0",
137
137
  "1,QUERY,0,0,1,0,0,1,SERVFAIL,1,0,0,0",
138
+ "1,QUERY,0,0,0,1,0,0,NOERROR,1,0,13,13", #iq94
139
+ "1,QUERY,0,0,0,1,0,0,NOERROR,1,0,1,0", #iq95
140
+ "1,QUERY,0,0,1,0,0,0,NOERROR,1,0,13,13",
141
+ "1,IQUERY,1,0,0,0,0,0,NOTIMP,1,0,0,0", #iq97
142
+ "1,IQUERY,1,0,0,0,1,1,NOTIMP,1,0,0,0", #iq98
143
+ "1,IQUERY,0,0,1,1,0,0,NOERROR,1,0,1,0", #iq99
144
+ "1,QUERY,.,0,1,0,0,0,NOERROR,1,0,0,0", #iq100
145
+ "1,QUERY,0,0,1,0,0,0,NXDOMAIN,1,0,0,0", #101
138
146
  ].freeze
139
147
 
140
148
  RULESET = [
141
- { :fingerprint => "query timed out" , :header => QY[0], :query => "com. IN A", :ruleset => [
142
- { :fingerprint => "query timed out", :header => QY[7], :query => ". CH A", :ruleset => [
143
- { :fingerprint => "query timed out", :header => QY[6], :query => ". IN A", :ruleset => [
144
- { :fingerprint => IQ[38], :result => { :vendor => "Digital Lumber", :product => "Oak DNS", :version =>"" }, :qv => ":version.oak",},
145
- ## { :fingerprint => "query timed out", :result => "TIMEOUT",},
146
- { :fingerprint => ".+", :state => "q0tq0tq7tq6r?", }, ]
149
+ { :fingerprint => IQ[89], :result => { :vendor => "Simon Kelley", :product => "dnsmasq", :version =>""}, :qv => "version.bind", },
150
+ { :fingerprint => ".+", :header => QY[0], :query => ". IN A", :ruleset => [
151
+ { :fingerprint => "query timed out" , :header => QY[0], :query => "com. IN A", :ruleset => [
152
+ { :fingerprint => "query timed out", :header => QY[7], :query => ". CH A", :ruleset => [
153
+ { :fingerprint => "query timed out", :header => QY[6], :query => ". IN A", :ruleset => [
154
+ { :fingerprint => IQ[38], :result => { :vendor => "Digital Lumber", :product => "Oak DNS", :version =>"" }, :qv => ":version.oak",},
155
+ { :fingerprint => "query timed out", :result => "TIMEOUT",},
156
+ { :fingerprint => ".+", :state => "q0tq0tq7tq6r?", }, ]
157
+ },
158
+ { :fingerprint => IQ[35], :result => { :vendor => "XBILL", :product => "jnamed (dnsjava)", :version => "" }, },
159
+ { :fingerprint => IQ[36], :result => { :vendor => "Men & Mice", :product => "QuickDNS for MacOS Classic", :version => ""}, },
160
+ { :fingerprint => IQ[37], :result => { :vendor => "unknown", :product => "NonSequitur DNS", :version => ""}, },
161
+ { :fingerprint => ".+", :state => "q0tq0tq7r?", }, ]
147
162
  },
148
- { :fingerprint => IQ[35], :result => { :vendor => "XBILL", :product => "jnamed (dnsjava)", :version => "" }, },
149
- { :fingerprint => IQ[36], :result => { :vendor => "menandmice", :product => "QuickDNS", :version => ""}, },
150
- { :fingerprint => IQ[37], :result => { :vendor => "unknown", :product => "NonSequitur DNS", :version => ""}, },
151
- { :fingerprint => ".+", :state => "q0tq0tq7r?", }, ]
163
+ { :fingerprint => IQ[35], :result => { :vendor => "eNom", :product => "eNom DNS", :version =>""}, },
164
+ { :fingerprint => ".+", :state => "q0tq0r?", },]
152
165
  },
153
- { :fingerprint => IQ[35], :result => { :vendor => "eNom", :product => "eNom DNS", :version =>""}, },
154
- { :fingerprint => ".+", :state => "q0tq0r?", },]
155
- },
156
166
 
157
- { :fingerprint => IQ[0], :header => QY[1], :query=> "jjjjjjjjjjjj IN A", :ruleset => [
158
- { :fingerprint => IQ[12], :result => { :vendor => "ISC", :product => "BIND", :version => "8.4.1-p1" }, :qv => ":version.bind",},
159
- { :fingerprint => IQ[13], :result => { :vendor => "ISC", :product => "BIND", :version => "8 plus root server modifications"}, :qv => ":version.bind",},
160
- { :fingerprint => IQ[15], :result => { :vendor => "Cisco", :product => "CNR", :version => ""}, },
161
- { :fingerprint => IQ[16], :header => QY[2], :query => "hostname.bind CH TXT", :ruleset => [
162
- { :fingerprint => IQ[58], :result => { :vendor => "ISC", :product => "BIND", :version => "8.3.0-RC1 -- 8.4.4"}, :qv => ":version.bind",},
163
- { :fingerprint => IQ[50], :result => { :vendor => "ISC", :product => "BIND", :version => "8.3.0-RC1 -- 8.4.4"}, :qv => ":version.bind",},
164
- { :fingerprint => IQ[48], :result => { :vendor => "ISC", :product => "BIND", :version => "8.2.2-P3 -- 8.3.0-T2A"}, :qv => ":version.bind",},
165
- { :fingerprint => ".+", :state => "q0r0q1r16q2r?", },]
167
+ { :fingerprint => IQ[0], :header => QY[1], :query=> "jjjjjjjjjjjj IN A", :ruleset => [
168
+ { :fingerprint => IQ[12], :result => { :vendor => "ISC", :product => "BIND", :version => "8.4.1-p1" }, :qv => ":version.bind",},
169
+ { :fingerprint => IQ[13], :result => { :vendor => "ISC", :product => "BIND", :version => "8 plus root server modifications"}, :qv => ":version.bind",},
170
+ { :fingerprint => IQ[15], :result => { :vendor => "Cisco", :product => "CNR", :version => ""}, },
171
+ { :fingerprint => IQ[16], :header => QY[2], :query => "hostname.bind CH TXT", :ruleset => [
172
+ { :fingerprint => IQ[58], :result => { :vendor => "ISC", :product => "BIND", :version => "8.3.0-RC1 -- 8.4.4"}, :qv => ":version.bind",},
173
+ { :fingerprint => IQ[50], :result => { :vendor => "ISC", :product => "BIND", :version => "8.3.0-RC1 -- 8.4.4"}, :qv => ":version.bind",},
174
+ { :fingerprint => IQ[48], :result => { :vendor => "ISC", :product => "BIND", :version => "8.2.2-P3 -- 8.3.0-T2A"}, :qv => ":version.bind",},
175
+ { :fingerprint => ".+", :state => "q0r0q1r16q2r?", },]
176
+ },
177
+ { :fingerprint => ".+", :state => "q0r0q1r?", },]
166
178
  },
167
- { :fingerprint => ".+", :state => "q0r0q1r?", },]
168
- },
169
-
170
- { :fingerprint => IQ[1], :header => QY[2], :query => ". IN IXFR", :ruleset => [
171
- { :fingerprint => IQ[31], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "2000" }, },
172
- { :fingerprint => IQ[32], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "NT4" }, },
173
- { :fingerprint => IQ[50], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "2003"}, },
174
- { :fingerprint => ".+", :state => "q0r1q2r?", }, ]
175
- },
176
-
177
- { :fingerprint => IQ[2], :header => QY[1], :ruleset => [
178
- { :fingerprint => IQ[11], :result => { :vendor => "ISC", :product => "BIND", :version => "9.2.3rc1 -- 9.4.0a0" }, :qv => ":version.bind",},
179
- { :fingerprint => IQ[12], :header => QY[3], :ruleset => [
180
- { :fingerprint => IQ[25], :header => QY[6], :ruleset => [
181
- { :fingerprint => IQ[33], :result => { :vendor => "bboy", :product => "MyDNS", :version => "" },},
182
- { :fingerprint => IQ[34], :header => QY[2], :query => "012345678901234567890123456789012345678901234567890123456789012.012345678901234567890123456789012345678901234567890123456789012.012345678901234567890123456789012345678901234567890123456789012.0123456789012345678901234567890123456789012345678901234567890. IN A", :ruleset => [
183
- { :fingerprint => IQ[47], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.0.3 -- 1.2.1"}, :qv => ":version.server", },
184
- { :fingerprint => IQ[48], :header => QY[2], :query => "hostname.bind CH TXT", :ruleset => [
185
- { :fingerprint => IQ[50], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.2.2" }, :qv => ":version.server", },
186
- { :fingerprint => IQ[51], :header => QY[8], :query => ". IN A", :ruleset => [
187
- { :fingerprint => IQ[93], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.2.3 -- 2.1.2" } , :qv => ":version.server", },
188
- { :fingerprint => IQ[48], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "2.1.3" }, :qv => ":version.server", },
189
- { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r34q2r48q2r51q8r?", }, ]
179
+
180
+ { :fingerprint => IQ[1], :header => QY[2], :query => ". IN IXFR", :ruleset => [
181
+ { :fingerprint => IQ[31], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "2000" }, },
182
+ { :fingerprint => IQ[32], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "NT4" }, },
183
+ { :fingerprint => IQ[50], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "2003"}, },
184
+ { :fingerprint => ".+", :state => "q0r1q2r?", }, ]
185
+ },
186
+
187
+ { :fingerprint => IQ[2], :header => QY[1], :ruleset => [
188
+ { :fingerprint => IQ[11], :result => { :vendor => "ISC", :product => "BIND", :version => "9.2.3rc1 -- 9.4.0a4" }, :qv => ":version.bind",},
189
+ { :fingerprint => IQ[12], :header => QY[3], :ruleset => [
190
+ { :fingerprint => IQ[25], :header => QY[6], :ruleset => [
191
+ { :fingerprint => IQ[33], :result => { :vendor => "bboy", :product => "MyDNS", :version => "" },},
192
+ { :fingerprint => IQ[34], :header => QY[2], :query => "012345678901234567890123456789012345678901234567890123456789012.012345678901234567890123456789012345678901234567890123456789012.012345678901234567890123456789012345678901234567890123456789012.0123456789012345678901234567890123456789012345678901234567890. IN A", :ruleset => [
193
+ { :fingerprint => IQ[47], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.0.3 -- 1.2.1"}, :qv => ":version.server", },
194
+ { :fingerprint => IQ[48], :header => QY[2], :query => "hostname.bind CH TXT", :ruleset => [
195
+ { :fingerprint => IQ[50], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.2.2" }, :qv => ":version.server", },
196
+ { :fingerprint => IQ[51], :header => QY[8], :query => ". IN A", :ruleset => [
197
+ { :fingerprint => IQ[93], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.2.3 -- 2.1.2" } , :qv => ":version.server", },
198
+ { :fingerprint => IQ[48], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "2.1.3" }, :qv => ":version.server", },
199
+ { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r34q2r48q2r51q8r?", }, ]
200
+ },
201
+ { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r34q2r48q2r?", }, ]
190
202
  },
191
- { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r34q2r48q2r?", }, ]
192
- },
193
- { :fingerprint => IQ[49], :header => QY[2], :query => "hostname.bind CH TXT", :ruleset => [
194
- { :fingerprint => IQ[50], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.2.2 [root]"} , :qv => ":version.server", },
195
- { :fingerprint => IQ[51], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.2.3 [root]"}, :qv => ":version.server", },
196
- { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r34q2r49q2r?", }, ]
203
+ { :fingerprint => IQ[49], :header => QY[2], :query => "hostname.bind CH TXT", :ruleset => [
204
+ { :fingerprint => IQ[50], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.2.2 [root]"} , :qv => ":version.server", },
205
+ { :fingerprint => IQ[51], :result => { :vendor => "NLnetLabs", :product => "NSD", :version => "1.2.3 [root]"}, :qv => ":version.server", },
206
+ { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r34q2r49q2r?", }, ]
207
+ },
208
+ { :fingerprint => IQ[53], :result => { :vendor => "NLnetLabs", :product=>"NSD", :version => "1.0.2"}, :qv => ":version.server", },
209
+ { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r34q2a?", },]
197
210
  },
198
- { :fingerprint => IQ[53], :result => { :vendor => "NLnetLabs", :product=>"NSD", :version => "1.0.2"}, :qv => ":version.server", },
199
- { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r34q2a?", },]
211
+ { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r?", },]
200
212
  },
201
- { :fingerprint => ".+", :state => "q0r2q1r12q3r25q6r?", },]
213
+ { :fingerprint => IQ[26], :result => { :vendor => "VeriSign", :product => "ATLAS", :version => ""},},
214
+ { :fingerprint => ".+", :state => "q0r2q1r12q3r?", },]
202
215
  },
203
- { :fingerprint => IQ[26], :result => { :vendor => "VeriSign", :product => "ATLAS", :version => ""},},
204
- { :fingerprint => ".+", :state => "q0r2q1r12q3r?", },]
205
- },
206
- { :fingerprint => IQ[15], :header => QY[6], :ruleset => [
207
- { :fingerprint => IQ[45], :result => { :vendor => "Nominum", :product =>"ANS", :version =>""}, :qv => ":version.bind",},
208
- { :fingerprint => IQ[65], :result => { :vendor => "ISC", :product => "BIND", :version => "9.2.3rc1 -- 9.4.0a0" }, :qv => ":version.bind",},
209
- { :fingerprint => IQ[46], :header => QY[7], :ruleset => [
210
- { :fingerprint => IQ[56], :result => { :vendor => "ISC", :product => "BIND", :version => "9.0.0b5 -- 9.0.1" }, :qv => ":version.bind",},
211
- { :fingerprint => IQ[57], :result => { :vendor => "ISC", :product => "BIND", :version => "9.1.0 -- 9.1.3" }, :qv => ":version.bind",},
212
- { :fingerprint => ".+", :state => "q0r2q1r15q6r46q7r?", }, ]
216
+ { :fingerprint => IQ[15], :header => QY[6], :ruleset => [
217
+ { :fingerprint => IQ[45], :result => { :vendor => "Nominum", :product =>"ANS", :version =>""}, :qv => ":version.bind",},
218
+ { :fingerprint => IQ[65], :result => { :vendor => "ISC", :product => "BIND", :version => "9.2.3rc1 -- 9.4.0a4" }, :qv => ":version.bind",},
219
+ { :fingerprint => IQ[46], :header => QY[7], :ruleset => [
220
+ { :fingerprint => IQ[56], :result => { :vendor => "ISC", :product => "BIND", :version => "9.0.0b5 -- 9.0.1" }, :qv => ":version.bind",},
221
+ { :fingerprint => IQ[57], :result => { :vendor => "ISC", :product => "BIND", :version => "9.1.0 -- 9.1.3" }, :qv => ":version.bind",},
222
+ { :fingerprint => ".+", :state => "q0r2q1r15q6r46q7r?", }, ]
223
+ },
224
+ { :fingerprint => ".+", :state => "q0r2q1r15q6r?", },]
213
225
  },
214
- { :fingerprint => ".+", :state => "q0r2q1r15q6r?", },]
215
- },
216
- { :fingerprint => IQ[16], :header => QY[4], :ruleset => [
217
- { :fingerprint => IQ[29], :result => { :vendor => "ISC", :product => "BIND", :version => "9.2.0a1 -- 9.2.0rc3"}, :qv => ":version.bind",},
218
- { :fingerprint => IQ[30], :header => QY[0], :query => ". A CLASS0" , :ruleset => [
219
- { :fingerprint => IQ[2], :result => { :vendor=>"ISC", :product => "BIND", :version =>"9.2.0rc7 -- 9.2.2-P3"}, :qv => ":version.bind", },
220
- { :fingerprint => IQ[0], :result => { :vendor=>"ISC", :product => "BIND", :version =>"9.2.0rc4 -- 9.2.0rc6"}, :qv => ":version.bind", },
221
- { :fingerprint => ".+", :result => { :vendor => "ISC", :product => "BIND", :version =>"9.2.0rc4 -- 9.2.2-P3"}, :qv => ":version.bind", }, ]
226
+ { :fingerprint => IQ[16], :header => QY[4], :ruleset => [
227
+ { :fingerprint => IQ[29], :result => { :vendor => "ISC", :product => "BIND", :version => "9.2.0a1 -- 9.2.0rc3"}, :qv => ":version.bind",},
228
+ { :fingerprint => IQ[30], :header => QY[0], :query => ". A CLASS0" , :ruleset => [
229
+ { :fingerprint => IQ[2], :result => { :vendor=>"ISC", :product => "BIND", :version =>"9.2.0rc7 -- 9.2.2-P3"}, :qv => ":version.bind", },
230
+ { :fingerprint => IQ[0], :result => { :vendor=>"ISC", :product => "BIND", :version =>"9.2.0rc4 -- 9.2.0rc6"}, :qv => ":version.bind", },
231
+ { :fingerprint => ".+", :result => { :vendor => "ISC", :product => "BIND", :version =>"9.2.0rc4 -- 9.2.2-P3"}, :qv => ":version.bind", }, ]
232
+ },
233
+ { :fingerprint => ".+", :state => "q0r2q1r16q4r?", },]
222
234
  },
223
- { :fingerprint => ".+", :state => "q0r2q1r16q4r?", },]
235
+ { :fingerprint => ".+", :state => "q0r2q1r?", }, ]
224
236
  },
225
- { :fingerprint => ".+", :state => "q0r2q1r?", }, ]
226
- },
227
-
228
- { :fingerprint => IQ[3], :header => QY[1], :ruleset => [
229
- { :fingerprint => "query timed out", :header => QY[5], :ruleset => [
230
- { :fingerprint => IQ[3], :result => { :vendor => "sourceforge", :product =>"Dents", :version =>""}, :qv => ":version.bind", },
231
- { :fingerprint => IQ[81], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "2003" },},
232
- { :fingerprint => IQ[91], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "2003" },},
233
- { :fingerprint => ".+", :state => "q0r3q1tq5r?", }, ]
234
-
235
- },
236
- { :fingerprint => IQ[14], :result => { :vendor => "UltraDNS", :product => "", :version =>"v2.7.0.2 -- 2.7.3"}, :qv => ":version.bind", },
237
- { :fingerprint => IQ[13], :header => QY[5], :ruleset => [
238
- { :fingerprint => IQ[39], :result => { :vendor => "pliant", :product => "DNS Server", :version =>""},},
239
- { :fingerprint => IQ[7], :result => { :vendor => "JHSOFT", :product => "simple DNS plus", :version =>""}, },
240
- { :fingerprint => IQ[71], :header => QY[6], :ruleset => [
241
- { :fingerprint => IQ[41], :result => { :vendor =>"Netnumber", :product =>"ENUM server", :version =>""}, },
242
- { :fingerprint => IQ[85], :result => { :vendor =>"Raiden", :product => "DNSD", :version => ""}, }, ]
237
+
238
+ { :fingerprint => IQ[3], :header => QY[1], :ruleset => [
239
+ { :fingerprint => "query timed out", :header => QY[5], :ruleset => [
240
+ { :fingerprint => IQ[3], :result => { :vendor => "sourceforge", :product =>"Dents", :version =>""}, :qv => ":version.bind", },
241
+ { :fingerprint => IQ[81], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "2003" },},
242
+ { :fingerprint => IQ[91], :result => { :vendor => "Microsoft", :product => "Windows DNS", :version => "2003" },},
243
+ { :fingerprint => ".+", :state => "q0r3q1tq5r?", }, ]
244
+
245
+ },
246
+ { :fingerprint => IQ[14], :result => { :vendor => "UltraDNS", :product => "", :version =>"v2.7.0.2 -- 2.7.3"}, :qv => ":version.bind", },
247
+ { :fingerprint => IQ[13], :header => QY[5], :ruleset => [
248
+ { :fingerprint => IQ[39], :result => { :vendor => "pliant", :product => "DNS Server", :version =>""},},
249
+ { :fingerprint => IQ[7], :result => { :vendor => "JHSOFT", :product => "simple DNS plus", :version =>""}, },
250
+ { :fingerprint => IQ[71], :header => QY[6], :ruleset => [
251
+ { :fingerprint => IQ[41], :result => { :vendor =>"Netnumber", :product =>"ENUM server", :version =>""}, },
252
+ { :fingerprint => IQ[85], :result => { :vendor =>"Raiden", :product => "DNSD", :version => ""}, }, ]
253
+ },
254
+ { :fingerprint => ".+", :state => "q0r3q1r13q5r?", }, ]
243
255
  },
244
- { :fingerprint => ".+", :state => "q0r3q1r13q5r?", }, ]
256
+ { :fingerprint => ".+", :state => "q0r3q1r?", }, ]
245
257
  },
246
- { :fingerprint => ".+", :state => "q0r3q1r?", }, ]
247
- },
248
-
249
- { :fingerprint => IQ[4], :header => QY[1], :query=> "jjjjjjjjjjjj IN A", :ruleset => [
250
- { :fingerprint => IQ[17], :result => { :vendor => "ISC", :product => "BIND", :version =>"9.0.0b5 -- 9.0.1 [rcursion enabled]"}, :qv => ":version.bind", },
251
- { :fingerprint => IQ[18], :header => QY[5], :query=> ". IN A" , :ruleset => [
252
- { :fingerprint => IQ[27], :result => { :vendor => "ISC", :product => "BIND", :version => "4.9.3 -- 4.9.11"}, :qv => ":version.bind", },
253
- { :fingerprint => IQ[28], :result => { :vendor => "ISC", :product => "BIND", :version => "4.8 -- 4.8.3"}, },
254
- { :fingerprint => ".+", :state => "q0r4q1r18q5r?", }, ]
258
+
259
+ { :fingerprint => IQ[4], :header => QY[1], :query=> "jjjjjjjjjjjj IN A", :ruleset => [
260
+ { :fingerprint => IQ[17], :result => { :vendor => "ISC", :product => "BIND", :version =>"9.0.0b5 -- 9.0.1 [recursion enabled]"}, :qv => ":version.bind", },
261
+ { :fingerprint => IQ[18], :header => QY[5], :query=> ". IN A" , :ruleset => [
262
+ { :fingerprint => IQ[27], :result => { :vendor => "ISC", :product => "BIND", :version => "4.9.3 -- 4.9.11"}, :qv => ":version.bind", },
263
+ { :fingerprint => IQ[28], :result => { :vendor => "ISC", :product => "BIND", :version => "4.8 -- 4.8.3"}, },
264
+ { :fingerprint => ".+", :state => "q0r4q1r18q5r?", }, ]
265
+ },
266
+ { :fingerprint => IQ[19], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.2.1 [recursion enabled]"}, :qv => ":version.bind", },
267
+ { :fingerprint => IQ[20], :header => QY[3], :query=> ". IN A", :ruleset => [
268
+ { :fingerprint => IQ[42], :result => {:vendor => "ISC", :product =>"BIND", :version =>"8.1-REL -- 8.2.1-T4B [recursion enabled]"}, :qv => ":version.bind", },
269
+ { :fingerprint => ".+", :state => "q0r4q1r20q3r?", },]
270
+ },
271
+ { :fingerprint => IQ[21], :header => QY[2], :query => "hostname.bind CH TXT", :ruleset => [
272
+ { :fingerprint => IQ[60], :result => {:vendor =>"ISC", :product => "BIND", :version => "8.3.0-RC1 -- 8.4.4 [recursion enabled]"}, :qv => ":version.bind",},
273
+ { :fingerprint => IQ[59], :header => QY[7], :query=> ". IN A", :ruleset => [
274
+ { :fingerprint => IQ[68], :result => {:vendor =>"ISC", :product => "BIND", :version => "8.1-REL -- 8.2.1-T4B [recursion enabled]"}, :qv => ":version.bind", },
275
+ { :fingerprint => IQ[69], :result => {:vendor =>"ISC", :product => "BIND", :version => "8.2.2-P3 -- 8.3.0-T2A [recursion enabled]"}, :qv => ":version.bind",},
276
+ { :fingerprint => "connection failed", :result => { :vendor =>"Runtop", :product => "dsl/cable", :version =>""},},
277
+ { :fingerprint => ".+", :state => "q0r4q1r21q2r59q7r?", },]
278
+ },
279
+
280
+ { :fingerprint => IQ[58], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.3.0-RC1 -- 8.4.4 [recursion local]"}, :qv => ":version.bind",},
281
+ { :fingerprint => IQ[50], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.3.0-RC1 -- 8.4.4 [recursion local]"}, :qv => ":version.bind",},
282
+ { :fingerprint => IQ[61], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.3.0-RC1 -- 8.4.4 [recursion local]"}, :qv => ":version.bind",},
283
+ { :fingerprint => IQ[48], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.2.2-P3 -- 8.3.0-T2A [recursion local]"}, :qv => ":version.bind",},
284
+ { :fingerprint => ".+", :state => "q0r4q1r21q2r?", },]
285
+ },
286
+ { :fingerprint => ".+", :state => "q0r4q1r?", }, ]
255
287
  },
256
- { :fingerprint => IQ[19], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.2.1 [recursion enabled]"}, :qv => ":version.bind", },
257
- { :fingerprint => IQ[20], :header => QY[3], :query=> ". IN A", :ruleset => [
258
- { :fingerprint => IQ[42], :result => {:vendor => "ISC", :product =>"BIND", :version =>"8.1-REL -- 8.2.1-T4B [recursion enabled]"}, :qv => ":version.bind", },
259
- { :fingerprint => ".+", :state => "q0r4q1r20q3r?", },]
288
+
289
+ { :fingerprint => IQ[5], :header => QY[1], :ruleset => [
290
+ { :fingerprint => IQ[11], :result => { :vendor => "ISC", :product => "BIND", :version => "9.2.3rc1 -- 9.4.0a4", :option => "recursion enabled,split view" }, :qv => ":version.bind",},
291
+ { :fingerprint => IQ[17], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.3rc1 -- 9.4.0a4 [recursion enabled]"}, :qv => ":version.bind",},
292
+ { :fingerprint => IQ[18], :header => QY[5], :ruleset => [
293
+ { :fingerprint => IQ[5], :header => QY[7], :query => ". IN A", :ruleset => [
294
+ { :fingerprint => IQ[84], :result => {:vendor => "Nominum", :product =>"CNS", :version => ""}, :qv => ":version.bind",},
295
+ { :fingerprint => IQ[59], :result => {:vendor => "Mikrotik", :product =>"dsl/cable", :version => ""}, },
296
+ { :fingerprint => IQ[82], :result => {:vendor => "Mikrotik", :product =>"dsl/cable", :version => ""}, },
297
+ { :fingerprint => ".+", :state => "q0r5q1r18q5r5q7r?", }, ]
298
+ },
299
+ ## { :fingerprint => IQ[64], :result => "unknown, smells like old BIND 4", },
300
+ { :fingerprint => ".+", :state => "q0r5q1r18q5r?", }, ]
301
+ },
302
+ { :fingerprint => IQ[20], :header => QY[7], :ruleset => [
303
+ { :fingerprint => IQ[54], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.0.0b5 -- 9.0.1 [recursion enabled]"}, :qv => ":version.bind",},
304
+ { :fingerprint => IQ[55], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.1.0 -- 9.1.3 [recursion enabled]"}, :qv => ":version.bind",},
305
+ { :fingerprint => IQ[63], :result => {:vendor => "ISC", :product =>"BIND", :version => "4.9.3 -- 4.9.11 [recursion enabled]"}, :qv => ":version.bind",},
306
+ { :fingerprint => IQ[61], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.0.0b5 -- 9.1.3 [recursion local]"}, :qv => ":version.bind",},
307
+ { :fingerprint => ".+", :state => "q0r5q1r20q7r?", }, ]
308
+ },
309
+ { :fingerprint => IQ[21], :header => QY[4], :ruleset => [
310
+ { :fingerprint => "query timed out", :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0a1 -- 9.2.2-P3 [recursion enabled]"}, :qv => ":version.bind", },
311
+ { :fingerprint => IQ[29], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0a1 -- 9.2.0rc3 [recursion enabled]"}, :qv => ":version.bind", },
312
+ { :fingerprint => IQ[61], :header => QY[0], :query => ". A CLASS0" , :ruleset => [
313
+ { :fingerprint => IQ[2], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0rc7 -- 9.2.2-P3 [recursion local]"}, :qv => ":version.bind", },
314
+ { :fingerprint => IQ[0], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0a1 -- 9.2.0rc6 [recursion local]"}, :qv => ":version.bind", },
315
+ { :fingerprint => ".+", :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0a1 -- 9.2.2-P3 [recursion local]"}, :qv => ":version.bind", }, ]
316
+ },
317
+ { :fingerprint => IQ[30], :header => QY[0], :query => ". A CLASS0" , :ruleset => [
318
+ { :fingerprint => IQ[2], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0rc7 -- 9.2.2-P3 [recursion enabled]"}, :qv => ":version.bind", },
319
+ { :fingerprint => IQ[0], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0rc4 -- 9.2.0rc6 [recursion enabled]"}, :qv => ":version.bind", },
320
+ { :fingerprint => ".+", :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0rc4 -- 9.2.2-P3 [recursion enabled]"}, :qv => ":version.bind", }, ]
321
+ },
322
+ { :fingerprint => ".+", :state => "q0r5q1r21q4r?", }, ]
323
+ },
324
+ { :fingerprint => ".+", :state => "q0r5q1r?", }, ]
260
325
  },
261
- { :fingerprint => IQ[21], :header => QY[2], :query => "hostname.bind CH TXT", :ruleset => [
262
- { :fingerprint => IQ[60], :result => {:vendor =>"ISC", :product => "BIND", :version => "8.3.0-RC1 -- 8.4.4 [recursion enabled]"}, :qv => ":version.bind",},
263
- { :fingerprint => IQ[59], :header => QY[7], :query=> ". IN A", :ruleset => [
264
- { :fingerprint => IQ[68], :result => {:vendor =>"ISC", :product => "BIND", :version => "8.1-REL -- 8.2.1-T4B [recursion enabled]"}, :qv => ":version.bind", },
265
- { :fingerprint => IQ[69], :result => {:vendor =>"ISC", :product => "BIND", :version => "8.2.2-P3 -- 8.3.0-T2A [recursion enabled]"}, :qv => ":version.bind",},
266
- { :fingerprint => "connection failed", :result => { :vendor =>"Runtop", :product => "dsl/cable", :version =>""},},
267
- { :fingerprint => ".+", :state => "q0r4q1r21q2r59q7r?", },]
326
+
327
+ { :fingerprint => IQ[6], :header => QY[1], :ruleset => [
328
+ { :fingerprint => IQ[15], :result => {:vendor => "incognito", :product =>"DNS commander", :version => "v2.3.1.1 -- 4.0.5.1"}, :qv => ":version.bind", },
329
+ { :fingerprint => IQ[19], :header => QY[3], :ruleset => [
330
+ { :fingerprint => IQ[66], :result => {:vendor => "vermicelli", :product =>"totd", :version => ""}, },
331
+ { :fingerprint => IQ[67], :result => {:vendor => "JHSOFT", :product =>"simple DNS plus", :version => "[recursion enabled]"}, },
332
+ { :fingerprint => ".+", :state => "q0r6q1r19q3r?", }, ]
268
333
  },
269
-
270
- { :fingerprint => IQ[58], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.3.0-RC1 -- 8.4.4 [recursion local]"}, :qv => ":version.bind",},
271
- { :fingerprint => IQ[50], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.3.0-RC1 -- 8.4.4 [recursion local]"}, :qv => ":version.bind",},
272
- { :fingerprint => IQ[61], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.3.0-RC1 -- 8.4.4 [recursion local]"}, :qv => ":version.bind",},
273
- { :fingerprint => IQ[48], :result => {:vendor => "ISC", :product =>"BIND", :version => "8.2.2-P3 -- 8.3.0-T2A [recursion local]"}, :qv => ":version.bind",},
274
- { :fingerprint => ".+", :state => "q0r4q1r21q2r?", },]
334
+ { :fingerprint => ".+", :state => "q0r6q1r?", }, ]
275
335
  },
276
- { :fingerprint => ".+", :state => "q0r4q1r?", }, ]
277
- },
278
-
279
- { :fingerprint => IQ[5], :header => QY[1], :ruleset => [
280
- { :fingerprint => IQ[11], :result => { :vendor => "ISC", :product => "BIND", :version => "9.2.3rc1 -- 9.4.0a0", :option => "recursion enabled,split view" }, :qv => ":version.bind",},
281
- { :fingerprint => IQ[17], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.3rc1 -- 9.4.0a0 [recursion enabled]"}, :qv => ":version.bind",},
282
- { :fingerprint => IQ[18], :header => QY[5], :ruleset => [
283
- { :fingerprint => IQ[5], :header => QY[7], :query => ". IN A", :ruleset => [
284
- { :fingerprint => IQ[84], :result => {:vendor => "Nominum", :product =>"CNS", :version => ""}, :qv => ":version.bind",},
285
- { :fingerprint => IQ[59], :result => {:vendor => "Mikrotik", :product =>"dsl/cable", :version => ""}, },
286
- { :fingerprint => IQ[82], :result => {:vendor => "Mikrotik", :product =>"dsl/cable", :version => ""}, },
287
- { :fingerprint => ".+", :state => "q0r5q1r18q5r5q7r?", }, ]
288
- },
289
- ## { :fingerprint => IQ[64], :result => "unknown, smells like old BIND 4", },
290
- { :fingerprint => ".+", :state => "q0r5q1r18q5r?", }, ]
291
- },
292
- { :fingerprint => IQ[20], :header => QY[7], :ruleset => [
293
- { :fingerprint => IQ[54], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.0.0b5 -- 9.0.1 [recursion enabled]"}, :qv => ":version.bind",},
294
- { :fingerprint => IQ[55], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.1.0 -- 9.1.3 [recursion enabled]"}, :qv => ":version.bind",},
295
- { :fingerprint => IQ[63], :result => {:vendor => "ISC", :product =>"BIND", :version => "4.9.3 -- 4.9.11 [recursion enabled]"}, :qv => ":version.bind",},
296
- { :fingerprint => IQ[61], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.0.0b5 -- 9.1.3 [recursion local]"}, :qv => ":version.bind",},
297
- { :fingerprint => ".+", :state => "q0r5q1r20q7r?", }, ]
298
- },
299
- { :fingerprint => IQ[21], :header => QY[4], :ruleset => [
300
- { :fingerprint => "query timed out", :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0a1 -- 9.2.2-P3 [recursion enabled]"}, :qv => ":version.bind", },
301
- { :fingerprint => IQ[29], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0a1 -- 9.2.0rc3 [recursion enabled]"}, :qv => ":version.bind", },
302
- { :fingerprint => IQ[61], :header => QY[0], :query => ". A CLASS0" , :ruleset => [
303
- { :fingerprint => IQ[2], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0rc7 -- 9.2.2-P3 [recursion local]"}, :qv => ":version.bind", },
304
- { :fingerprint => IQ[0], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0a1 -- 9.2.0rc6 [recursion local]"}, :qv => ":version.bind", },
305
- { :fingerprint => ".+", :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0a1 -- 9.2.2-P3 [recursion local]"}, :qv => ":version.bind", }, ]
336
+
337
+ { :fingerprint => IQ[7], :header => QY[1], :ruleset => [
338
+ { :fingerprint => IQ[22], :header => QY[3], :ruleset => [
339
+ { :fingerprint => IQ[97], :result => {:vendor => "PowerDNS", :product =>"PowerDNS", :version => "2.9.4 -- 2.9.19"}, :qv => "version.bind", },
340
+ { :fingerprint => IQ[98], :result => {:vendor => "Stanford", :product =>"lbnamed", :version => "1.0.0 -- 2.3.2"}, },
341
+ { :fingerprint => ".+", :state => "q0r7q1r22q3r?", }, ]
306
342
  },
307
- { :fingerprint => IQ[30], :header => QY[0], :query => ". A CLASS0" , :ruleset => [
308
- { :fingerprint => IQ[2], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0rc7 -- 9.2.2-P3 [recursion enabled]"}, :qv => ":version.bind", },
309
- { :fingerprint => IQ[0], :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0rc4 -- 9.2.0rc6 [recursion enabled]"}, :qv => ":version.bind", },
310
- { :fingerprint => ".+", :result => {:vendor => "ISC", :product =>"BIND", :version => "9.2.0rc4 -- 9.2.2-P3 [recursion enabled]"}, :qv => ":version.bind", }, ]
343
+ { :fingerprint => IQ[24], :result => {:vendor => "PowerDNS", :product =>"PowerDNS", :version => "2.8 -- 2.9.3"}, :qv => ":version.bind", },
344
+ { :fingerprint => ".+", :state => "q0r7q1r?", }, ]
345
+ },
346
+
347
+ { :fingerprint => IQ[8], :header => QY[1], :ruleset => [
348
+ { :fingerprint => IQ[23], :header => QY[2] , :query => ". CH A", :ruleset => [
349
+ { :fingerprint => "query timed out", :result => { :vendor => "DJ Bernstein", :product => "TinyDNS", :version => "1.04"} ,},
350
+ { :fingerprint => IQ[32], :result => {:vendor => "DJ Bernstein", :product => "TinyDNS", :version => "1.05"} ,},
351
+ { :fingerprint => ".+", :state => "q0r8q1r23q2r?",},]
311
352
  },
312
- { :fingerprint => ".+", :state => "q0r5q1r21q4r?", }, ]
313
- },
314
- { :fingerprint => ".+", :state => "q0r5q1r?", }, ]
315
- },
316
-
317
- { :fingerprint => IQ[6], :header => QY[1], :ruleset => [
318
- { :fingerprint => IQ[15], :result => {:vendor => "incognito", :product =>"DNS commander", :version => "v2.3.1.1 -- 4.0.5.1"}, :qv => ":version.bind", },
319
- { :fingerprint => IQ[19], :header => QY[3], :ruleset => [
320
- { :fingerprint => IQ[66], :result => {:vendor => "vermicelli", :product =>"totd", :version => ""}, },
321
- { :fingerprint => IQ[67], :result => {:vendor => "JHSOFT", :product =>"simple DNS plus", :version => "[recursion enabled]"}, },
322
- { :fingerprint => ".+", :state => "q0r6q1r19q3r?", }, ]
353
+ { :fingerprint => ".+", :state => "q0r8q1r?", }, ]
323
354
  },
324
- { :fingerprint => ".+", :state => "q0r6q1r?", }, ]
325
- },
326
-
327
- { :fingerprint => IQ[7], :header => QY[1], :ruleset => [
328
- { :fingerprint => IQ[22], :result => {:vendor => "PowerDNS", :product =>"PowerDNS", :version => "2.9.4 -- 2.9.11"}, :qv => ":version.bind", },
329
- { :fingerprint => IQ[24], :result => {:vendor => "PowerDNS", :product =>"PowerDNS", :version => "2.8 -- 2.9.3"}, :qv => ":version.bind", },
330
- { :fingerprint => ".+", :state => "q0r7q1r?", }, ]
331
- },
332
-
333
- { :fingerprint => IQ[8], :header => QY[1], :ruleset => [
334
- { :fingerprint => IQ[23], :header => QY[2] , :query => ". CH A", :ruleset => [
335
- { :fingerprint => "query timed out", :result => { :vendor => "DJ Bernstein", :product => "TinyDNS", :version => "1.04"} ,},
336
- { :fingerprint => IQ[32], :result => {:vendor => "DJ Bernstein", :product => "TinyDNS", :version => "1.05"} ,},
337
- { :fingerprint => ".+", :state => "q0r8q1r23q2r?",},]
355
+
356
+ { :fingerprint => IQ[9], :header => QY[1], :ruleset => [
357
+ { :fingerprint => IQ[9], :result => { :vendor => "Sam Trenholme", :product =>"MaraDNS", :version => ""}, :qv => "erre-con-erre-cigarro.maradns.org"},
358
+ { :fingerprint => ".+", :state => "q0r9q1r?", }, ]
338
359
  },
339
- { :fingerprint => ".+", :state => "q0r8q1r?", }, ]
340
- },
360
+
361
+ { :fingerprint => IQ[10], :result => { :vendor => "Microsoft", :product =>"?", :version => ""}, },
362
+ { :fingerprint => IQ[26], :result => { :vendor => "Meilof Veeningen", :product =>"Posadis", :version =>""}, },
363
+ { :fingerprint => IQ[43], :header => QY[6], :ruleset => [
364
+ { :fingerprint => IQ[34], :result => { :vendor => "Paul Rombouts", :product =>"pdnsd", :version =>""}, },
365
+ { :fingerprint => IQ[75], :result => { :vendor => "antirez", :product =>"Yaku-NS", :version =>""}, },
366
+ { :fingerprint => ".+", :state => "q0r43q6r?", }, ]
367
+ },
368
+
369
+ { :fingerprint => IQ[44], :result => { :vendor =>"cpan", :product=>"Net::DNS Nameserver", :version =>""}, :qv => ":version.bind", },
370
+ { :fingerprint => IQ[52], :result => { :vendor =>"NLnetLabs", :product=>"NSD", :version => "1.0 alpha"}, },
341
371
 
342
- { :fingerprint => IQ[9], :header => QY[1], :ruleset => [
343
- { :fingerprint => IQ[9], :result => { :vendor => "Sam Trenholme", :product =>"MaraDNS", :version => ""}, :qv => "erre-con-erre-cigarro.maradns.org"},
344
- { :fingerprint => ".+", :state => "q0r9q1r?", }, ]
345
- },
372
+ { :fingerprint => IQ[55], :header => QY[3], :ruleset => [
373
+ { :fingerprint => IQ[94], :result => { :vendor =>"robtex", :product=>"Viking DNS module", :version=>""}, },
374
+ { :fingerprint => IQ[95], :result => { :vendor =>"cisco", :product=>"dns resolver/server", :version=>""}, },
375
+ { :fingerprint => ".+", :state => "q0r55q3r?", }, ]
376
+ },
346
377
 
347
- { :fingerprint => IQ[10], :result => { :vendor => "Microsoft", :product =>"?", :version => ""}, },
348
- { :fingerprint => IQ[26], :result => { :vendor => "Meilof Veeningen", :product =>"Posadis", :version =>""}, },
349
- { :fingerprint => IQ[43], :header => QY[6], :ruleset => [
350
- { :fingerprint => IQ[34], :result => { :vendor => "Paul Rombouts", :product =>"pdnsd", :version =>""}, },
351
- { :fingerprint => IQ[75], :result => { :vendor => "antirez", :product =>"Yaku-NS", :version =>""}, },
352
- { :fingerprint => ".+", :state => "q0r43q6r?", }, ]
353
- },
378
+ { :fingerprint => IQ[59], :result => { :vendor =>"Max Feoktistov", :product=>"small HTTP server [recursion enabled]", :version =>""}, },
379
+ { :fingerprint => IQ[60], :result => { :vendor =>"Axis", :product=>"video server", :version =>""}, },
354
380
 
355
- { :fingerprint => IQ[44], :result => { :vendor =>"cpan", :product=>"Net::DNS Nameserver", :version =>""}, :qv => ":version.bind", },
356
- { :fingerprint => IQ[52], :result => { :vendor =>"NLnetLabs", :product=>"NSD", :version => "1.0 alpha"}, },
357
- { :fingerprint => IQ[55], :result => { :vendor =>"robtex", :product=>"Viking DNS module", :version=>""}, },
358
- { :fingerprint => IQ[59], :result => { :vendor =>"Max Feoktistov", :product=>"small HTTP server [recursion enabled]", :version =>""}, },
359
- { :fingerprint => IQ[60], :result => { :vendor =>"Axis", :product=>"video server", :version =>""}, },
360
- { :fingerprint => IQ[62], :header => QY[7], :query => "1.0.0.127.in-addr.arpa. IN PTR", :ruleset => [
361
- { :fingerprint => IQ[62], :result => { :vendor =>"Michael Tokarev", :product=>"rbldnsd",:version=>""}, :qv => ":version.bind", },
362
- { :fingerprint => IQ[79], :result => { :vendor =>"4D", :product=>"WebSTAR", :version=>""}, },
363
- { :fingerprint => IQ[83], :result => { :vendor =>"Netopia", :product =>"dsl/cable", :version => ""},},
364
- { :fingerprint => IQ[90], :result => { :vendor =>"TZO", :product=>"Tzolkin DNS",:version=>""}, },
365
- { :fingerprint => "query timed out", :result => { :vendor =>"Netopia", :product =>"dsl/cable", :version=>""},},
366
- { :fingerprint => ".+", :state => "q0r62q7r?", }, ]
367
- },
368
- { :fingerprint => IQ[70], :result => { :vendor =>"Yutaka Sato", :product=>"DeleGate DNS", :version=>""},},
369
- { :fingerprint => IQ[72], :result => { :vendor =>"", :product =>"sheerdns", :version=>""}, },
370
- { :fingerprint => IQ[73], :result => { :vendor =>"Matthew Pratt", :product=>"dproxy", :version=>""}, },
371
- { :fingerprint => IQ[74], :result => { :vendor =>"Brad Garcia", :product=>"dnrd",:version=>""}, },
372
- { :fingerprint => IQ[76], :result => { :vendor =>"Sourceforge", :product=>"JDNSS",:version=>""}, },
373
- { :fingerprint => IQ[77], :result => { :vendor =>"Dan Kaminsky", :product=>"nomde DNS tunnel",:version=>""}, },
374
- { :fingerprint => IQ[78], :result => { :vendor =>"Max Feoktistov", :product=>"small HTTP server", :version =>""}, },
375
- { :fingerprint => IQ[79], :result => { :vendor =>"robtex", :product=>"Viking DNS module", :version=>""}, },
376
- { :fingerprint => IQ[80], :result => { :vendor =>"Fasthosts", :product=>"Envisage DNS server", :version=>""}, },
377
- { :fingerprint => IQ[81], :result => { :vendor =>"WinGate", :product=>"Wingate DNS", :version=>""},},
378
- { :fingerprint => IQ[82], :result => { :vendor =>"Ascenvision", :product=>"SwiftDNS", :version=>""},},
379
- { :fingerprint => IQ[86], :result => { :vendor =>"Nortel Networks", :product=>"Instant Internet",:version=>""}, },
380
- { :fingerprint => IQ[87], :result => { :vendor =>"ATOS", :product=>"Stargate ADSL", :version=>""},},
381
- { :fingerprint => IQ[88], :result => { :vendor =>"3Com", :product=>"Office Connect Remote", :version=>""},},
382
- { :fingerprint => IQ[89], :result => { :vendor =>"Alteon", :product=>"ACEswitch", :version=>""},},
383
- { :fingerprint => IQ[90], :result => { :vendor =>"javaprofessionals", :product=>"javadns/jdns", :version=>""},},
381
+ { :fingerprint => IQ[62], :header => QY[7], :query => "1.0.0.127.in-addr.arpa. IN PTR", :ruleset => [
382
+ { :fingerprint => IQ[62], :result => { :vendor =>"Michael Tokarev", :product=>"rbldnsd",:version=>""}, :qv => ":version.bind", },
383
+ { :fingerprint => IQ[79], :result => { :vendor =>"4D", :product=>"WebSTAR", :version=>""}, },
384
+ { :fingerprint => IQ[83], :result => { :vendor =>"Netopia", :product =>"dsl/cable", :version => ""},},
385
+ { :fingerprint => IQ[90], :result => { :vendor =>"TZO", :product=>"Tzolkin DNS",:version=>""}, },
386
+ { :fingerprint => "query timed out", :result => { :vendor =>"Netopia", :product =>"dsl/cable", :version=>""},},
387
+ { :fingerprint => ".+", :state => "q0r62q7r?", }, ]
388
+ },
384
389
 
385
- { :fingerprint => IQ[92], :result => { :vendor =>"Beehive", :product=>"CoDoNS",:version=>""}, },
386
- { :fingerprint => ".+", :state => "q0r?", },
390
+ { :fingerprint => IQ[70], :result => { :vendor =>"Yutaka Sato", :product=>"DeleGate DNS", :version=>""},},
391
+ { :fingerprint => IQ[72], :result => { :vendor =>"", :product =>"sheerdns", :version=>""}, },
392
+ { :fingerprint => IQ[73], :result => { :vendor =>"Matthew Pratt", :product=>"dproxy", :version=>""}, },
393
+ { :fingerprint => IQ[74], :result => { :vendor =>"Brad Garcia", :product=>"dnrd",:version=>""}, },
394
+ { :fingerprint => IQ[76], :result => { :vendor =>"Sourceforge", :product=>"JDNSS",:version=>""}, },
395
+ { :fingerprint => IQ[77], :result => { :vendor =>"Dan Kaminsky", :product=>"nomde DNS tunnel",:version=>""}, },
396
+ { :fingerprint => IQ[78], :result => { :vendor =>"Max Feoktistov", :product=>"small HTTP server", :version =>""}, },
397
+ { :fingerprint => IQ[79], :result => { :vendor =>"robtex", :product=>"Viking DNS module", :version=>""}, },
398
+ { :fingerprint => IQ[80], :result => { :vendor =>"Fasthosts", :product=>"Envisage DNS server", :version=>""}, },
399
+ { :fingerprint => IQ[81], :result => { :vendor =>"WinGate", :product=>"Wingate DNS", :version=>""},},
400
+ { :fingerprint => IQ[82], :result => { :vendor =>"Ascenvision", :product=>"SwiftDNS", :version=>""},},
401
+ { :fingerprint => IQ[86], :result => { :vendor =>"Nortel Networks", :product=>"Instant Internet",:version=>""}, },
402
+ { :fingerprint => IQ[87], :result => { :vendor =>"ATOS", :product=>"Stargate ADSL", :version=>""},},
403
+ { :fingerprint => IQ[88], :result => { :vendor =>"3Com", :product=>"Office Connect Remote", :version=>""},},
404
+ { :fingerprint => IQ[89], :result => { :vendor =>"Alteon", :product=>"ACEswitch", :version=>""},},
405
+ { :fingerprint => IQ[90], :result => { :vendor =>"javaprofessionals", :product=>"javadns/jdns", :version=>""},},
406
+ { :fingerprint => IQ[92], :result => { :vendor =>"Beehive", :product=>"CoDoNS",:version=>""}, },
407
+ { :fingerprint => IQ[96], :result => { :vendor =>"Beevihe", :product=>"AAAAAA",:version=>""}, :qv => "version.bind", },
408
+ { :fingerprint => IQ[100], :result => { :vendor =>"ValidStream", :product=>"ValidDNS",:version=>""}, },
409
+ { :fingerprint => IQ[101], :result => { :vendor =>"ValidStream", :product=>"ValidDNS",:version=>""}, },
410
+ { :fingerprint => ".+", :state => "q0r?", }, ]
411
+ }
387
412
 
388
413
  ].freeze
389
414
  end