dnstraverse 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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