dnstraverse 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. data/LICENSE +674 -0
  2. data/README +4 -0
  3. data/Rakefile +19 -0
  4. data/a +44 -0
  5. data/bin/dnstraverse +300 -0
  6. data/doc.tar +0 -0
  7. data/doc/classes/DNSTraverse.html +198 -0
  8. data/doc/classes/DNSTraverse/CachingResolver.html +172 -0
  9. data/doc/classes/DNSTraverse/CachingResolver.src/M000055.html +21 -0
  10. data/doc/classes/DNSTraverse/CachingResolver.src/M000056.html +42 -0
  11. data/doc/classes/DNSTraverse/DecodedQuery.html +475 -0
  12. data/doc/classes/DNSTraverse/DecodedQuery.src/M000020.html +34 -0
  13. data/doc/classes/DNSTraverse/DecodedQuery.src/M000021.html +23 -0
  14. data/doc/classes/DNSTraverse/DecodedQuery.src/M000022.html +19 -0
  15. data/doc/classes/DNSTraverse/DecodedQuery.src/M000023.html +33 -0
  16. data/doc/classes/DNSTraverse/DecodedQuery.src/M000024.html +26 -0
  17. data/doc/classes/DNSTraverse/DecodedQuery.src/M000025.html +24 -0
  18. data/doc/classes/DNSTraverse/DecodedQuery.src/M000026.html +29 -0
  19. data/doc/classes/DNSTraverse/DecodedQuery.src/M000027.html +19 -0
  20. data/doc/classes/DNSTraverse/DecodedQuery.src/M000028.html +18 -0
  21. data/doc/classes/DNSTraverse/DecodedQuery.src/M000029.html +32 -0
  22. data/doc/classes/DNSTraverse/DecodedQuery.src/M000030.html +19 -0
  23. data/doc/classes/DNSTraverse/DecodedQuery.src/M000031.html +19 -0
  24. data/doc/classes/DNSTraverse/DecodedQuery.src/M000032.html +20 -0
  25. data/doc/classes/DNSTraverse/DecodedQuery.src/M000033.html +31 -0
  26. data/doc/classes/DNSTraverse/DecodedQueryCache.html +182 -0
  27. data/doc/classes/DNSTraverse/DecodedQueryCache.src/M000063.html +21 -0
  28. data/doc/classes/DNSTraverse/DecodedQueryCache.src/M000064.html +33 -0
  29. data/doc/classes/DNSTraverse/Fingerprint.html +277 -0
  30. data/doc/classes/DNSTraverse/Fingerprint.src/M000047.html +29 -0
  31. data/doc/classes/DNSTraverse/Fingerprint.src/M000048.html +18 -0
  32. data/doc/classes/DNSTraverse/Fingerprint.src/M000049.html +57 -0
  33. data/doc/classes/DNSTraverse/Fingerprint.src/M000050.html +28 -0
  34. data/doc/classes/DNSTraverse/Fingerprint.src/M000051.html +27 -0
  35. data/doc/classes/DNSTraverse/Fingerprint.src/M000052.html +35 -0
  36. data/doc/classes/DNSTraverse/Fingerprint.src/M000053.html +24 -0
  37. data/doc/classes/DNSTraverse/Fingerprint.src/M000054.html +29 -0
  38. data/doc/classes/DNSTraverse/InfoCache.html +235 -0
  39. data/doc/classes/DNSTraverse/InfoCache.src/M000034.html +20 -0
  40. data/doc/classes/DNSTraverse/InfoCache.src/M000035.html +23 -0
  41. data/doc/classes/DNSTraverse/InfoCache.src/M000036.html +28 -0
  42. data/doc/classes/DNSTraverse/InfoCache.src/M000037.html +25 -0
  43. data/doc/classes/DNSTraverse/InfoCache.src/M000038.html +27 -0
  44. data/doc/classes/DNSTraverse/InfoCache.src/M000039.html +33 -0
  45. data/doc/classes/DNSTraverse/MessageUtility.html +275 -0
  46. data/doc/classes/DNSTraverse/MessageUtility.src/M000011.html +35 -0
  47. data/doc/classes/DNSTraverse/MessageUtility.src/M000012.html +37 -0
  48. data/doc/classes/DNSTraverse/MessageUtility.src/M000013.html +28 -0
  49. data/doc/classes/DNSTraverse/MessageUtility.src/M000014.html +27 -0
  50. data/doc/classes/DNSTraverse/MessageUtility.src/M000015.html +30 -0
  51. data/doc/classes/DNSTraverse/MessageUtility.src/M000016.html +32 -0
  52. data/doc/classes/DNSTraverse/MessageUtility.src/M000017.html +34 -0
  53. data/doc/classes/DNSTraverse/MessageUtility.src/M000018.html +23 -0
  54. data/doc/classes/DNSTraverse/MessageUtility.src/M000019.html +36 -0
  55. data/doc/classes/DNSTraverse/Referral.html +641 -0
  56. data/doc/classes/DNSTraverse/Referral.src/M000065.html +22 -0
  57. data/doc/classes/DNSTraverse/Referral.src/M000066.html +21 -0
  58. data/doc/classes/DNSTraverse/Referral.src/M000067.html +23 -0
  59. data/doc/classes/DNSTraverse/Referral.src/M000068.html +19 -0
  60. data/doc/classes/DNSTraverse/Referral.src/M000069.html +18 -0
  61. data/doc/classes/DNSTraverse/Referral.src/M000070.html +54 -0
  62. data/doc/classes/DNSTraverse/Referral.src/M000071.html +25 -0
  63. data/doc/classes/DNSTraverse/Referral.src/M000072.html +27 -0
  64. data/doc/classes/DNSTraverse/Referral.src/M000073.html +23 -0
  65. data/doc/classes/DNSTraverse/Referral.src/M000074.html +20 -0
  66. data/doc/classes/DNSTraverse/Referral.src/M000075.html +40 -0
  67. data/doc/classes/DNSTraverse/Referral.src/M000076.html +52 -0
  68. data/doc/classes/DNSTraverse/Referral.src/M000077.html +29 -0
  69. data/doc/classes/DNSTraverse/Referral.src/M000078.html +54 -0
  70. data/doc/classes/DNSTraverse/Referral.src/M000079.html +18 -0
  71. data/doc/classes/DNSTraverse/Referral.src/M000080.html +22 -0
  72. data/doc/classes/DNSTraverse/Referral.src/M000081.html +20 -0
  73. data/doc/classes/DNSTraverse/Referral.src/M000082.html +29 -0
  74. data/doc/classes/DNSTraverse/Referral.src/M000083.html +28 -0
  75. data/doc/classes/DNSTraverse/Referral.src/M000084.html +29 -0
  76. data/doc/classes/DNSTraverse/Referral.src/M000085.html +55 -0
  77. data/doc/classes/DNSTraverse/Referral.src/M000086.html +30 -0
  78. data/doc/classes/DNSTraverse/Referral.src/M000087.html +24 -0
  79. data/doc/classes/DNSTraverse/Referral.src/M000088.html +20 -0
  80. data/doc/classes/DNSTraverse/Referral.src/M000089.html +58 -0
  81. data/doc/classes/DNSTraverse/ResolveError.html +111 -0
  82. data/doc/classes/DNSTraverse/Response.html +271 -0
  83. data/doc/classes/DNSTraverse/Response.src/M000057.html +27 -0
  84. data/doc/classes/DNSTraverse/Response.src/M000058.html +21 -0
  85. data/doc/classes/DNSTraverse/Response.src/M000059.html +19 -0
  86. data/doc/classes/DNSTraverse/Response.src/M000060.html +21 -0
  87. data/doc/classes/DNSTraverse/Response.src/M000061.html +31 -0
  88. data/doc/classes/DNSTraverse/Response.src/M000062.html +23 -0
  89. data/doc/classes/DNSTraverse/Response/NoGlue.html +222 -0
  90. data/doc/classes/DNSTraverse/Response/NoGlue.src/M000007.html +32 -0
  91. data/doc/classes/DNSTraverse/Response/NoGlue.src/M000008.html +18 -0
  92. data/doc/classes/DNSTraverse/Response/NoGlue.src/M000009.html +18 -0
  93. data/doc/classes/DNSTraverse/Response/NoGlue.src/M000010.html +18 -0
  94. data/doc/classes/DNSTraverse/Traverser.html +247 -0
  95. data/doc/classes/DNSTraverse/Traverser.src/M000040.html +17 -0
  96. data/doc/classes/DNSTraverse/Traverser.src/M000041.html +52 -0
  97. data/doc/classes/DNSTraverse/Traverser.src/M000042.html +61 -0
  98. data/doc/classes/DNSTraverse/Traverser.src/M000043.html +110 -0
  99. data/doc/classes/DNSTraverse/Traverser.src/M000044.html +63 -0
  100. data/doc/classes/DNSTraverse/Traverser.src/M000045.html +28 -0
  101. data/doc/classes/DNSTraverse/Traverser.src/M000046.html +18 -0
  102. data/doc/classes/FingerprintRules.html +175 -0
  103. data/doc/classes/Log.html +174 -0
  104. data/doc/classes/Log.src/M000002.html +18 -0
  105. data/doc/classes/Log.src/M000003.html +18 -0
  106. data/doc/classes/Log.src/M000004.html +18 -0
  107. data/doc/classes/Log/Formatter.html +165 -0
  108. data/doc/classes/Log/Formatter.src/M000005.html +22 -0
  109. data/doc/classes/Log/Formatter.src/M000006.html +24 -0
  110. data/doc/classes/TestFingerprint.html +137 -0
  111. data/doc/classes/TestFingerprint.src/M000001.html +22 -0
  112. data/doc/created.rid +1 -0
  113. data/doc/files/lib/dnstraverse/caching_resolver_rb.html +132 -0
  114. data/doc/files/lib/dnstraverse/decoded_query_cache_rb.html +132 -0
  115. data/doc/files/lib/dnstraverse/decoded_query_rb.html +132 -0
  116. data/doc/files/lib/dnstraverse/fingerprint_rb.html +134 -0
  117. data/doc/files/lib/dnstraverse/fingerprint_rules_rb.html +143 -0
  118. data/doc/files/lib/dnstraverse/info_cache_rb.html +131 -0
  119. data/doc/files/lib/dnstraverse/log_rb.html +131 -0
  120. data/doc/files/lib/dnstraverse/message_utility_rb.html +124 -0
  121. data/doc/files/lib/dnstraverse/referral_rb.html +134 -0
  122. data/doc/files/lib/dnstraverse/response_noglue_rb.html +124 -0
  123. data/doc/files/lib/dnstraverse/response_rb.html +132 -0
  124. data/doc/files/lib/dnstraverse/traverser_rb.html +137 -0
  125. data/doc/files/test/test_fingerprint_rb.html +133 -0
  126. data/doc/fr_class_index.html +43 -0
  127. data/doc/fr_file_index.html +39 -0
  128. data/doc/fr_method_index.html +115 -0
  129. data/doc/index.html +24 -0
  130. data/doc/rdoc-style.css +208 -0
  131. data/lib/dnstraverse/caching_resolver.rb +63 -0
  132. data/lib/dnstraverse/decoded_query.rb +199 -0
  133. data/lib/dnstraverse/decoded_query_cache.rb +53 -0
  134. data/lib/dnstraverse/fingerprint.rb +166 -0
  135. data/lib/dnstraverse/fingerprint_rules.rb +389 -0
  136. data/lib/dnstraverse/info_cache.rb +108 -0
  137. data/lib/dnstraverse/log.rb +55 -0
  138. data/lib/dnstraverse/message_utility.rb +199 -0
  139. data/lib/dnstraverse/referral.rb +463 -0
  140. data/lib/dnstraverse/response.rb +92 -0
  141. data/lib/dnstraverse/response_noglue.rb +54 -0
  142. data/lib/dnstraverse/traverser.rb +291 -0
  143. data/test/test_fingerprint.rb +29 -0
  144. metadata +231 -0
data/README ADDED
@@ -0,0 +1,4 @@
1
+ DNSTraverse is a rubygem and command line program that allows you to traverse
2
+ the DNS from the root exploring all possible ways of getting to the final
3
+ destination domain name. The results are probabilities of which server will
4
+ respond and what they will respond with.
data/Rakefile ADDED
@@ -0,0 +1,19 @@
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')
18
+ end
19
+ Rake::GemPackageTask.new(spec).define
data/a ADDED
@@ -0,0 +1,44 @@
1
+
2
+ ri v1.0.1 - 20041108
3
+
4
+ Usage:
5
+
6
+ ri [options] [names...]
7
+
8
+ Display information on Ruby classes, modules, and methods.
9
+ Give the names of classes or methods to see their documentation.
10
+ Partial names may be given: if the names match more than
11
+ one entity, a list will be shown, otherwise details on
12
+ that entity will be displayed.
13
+
14
+ Nested classes and modules can be specified using the normal
15
+ Name::Name notation, and instance methods can be distinguished
16
+ from class methods using "." (or "#") instead of "::".
17
+
18
+ For example:
19
+
20
+ ri File
21
+ ri File.new
22
+ ri F.n
23
+ ri zip
24
+
25
+ Note that shell quoting may be required for method names
26
+ containing punctuation:
27
+
28
+ ri 'Array.[]'
29
+ ri compact\!
30
+
31
+ By default ri searches for documentation in the following
32
+ directories:
33
+
34
+ /usr/share/ri/1.8/system
35
+ /usr/share/ri/1.8/site
36
+ /home/james/.rdoc
37
+ /usr/lib/ruby/gems/1.8/doc/*/ri
38
+
39
+ Specifying the --system, --site, --home, --gems or --doc-dir
40
+ options will limit ri to searching only the specified
41
+ directories.
42
+
43
+ For help on options, type 'ri -h'
44
+ For a list of classes I know about, type 'ri -c'
data/bin/dnstraverse ADDED
@@ -0,0 +1,300 @@
1
+ #!/usr/bin/env ruby
2
+ # = Summary
3
+ # Traverse the DNS from the root exploring all possible ways of
4
+ # getting to the final destination domain name. This is the command
5
+ # line interface to the DNSTraverse module.
6
+ #
7
+ # = Usage
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
+ #
38
+ # == Example
39
+ # dnstraverse www.nic.uk
40
+ # dnstraverse --fast www.google.com
41
+ # dnstraverse --fast --show-resolves --udp-size 1000 www.microsoft.com
42
+ #
43
+ # = Copyright
44
+ # Copyright (c) 2008 James Ponder <james@squish.net>
45
+ # Portions Copyright (c) 2003,2004,2005 Roy Arends & Jakob Schlyter
46
+ #
47
+ # This program is free software: you can redistribute it and/or modify
48
+ # it under the terms of the GNU General Public License as published by
49
+ # the Free Software Foundation, version 3 of the License.
50
+
51
+ require 'optparse'
52
+ require 'logger'
53
+ require 'rdoc/usage'
54
+ require 'pp'
55
+
56
+ require 'dnstraverse/traverser'
57
+ require 'dnstraverse/log'
58
+ require 'dnstraverse/fingerprint'
59
+
60
+ Version = [ 0, 0, 1].freeze
61
+
62
+ EMPTY_STRING = ''.freeze
63
+
64
+ def referral_txt_normal(r)
65
+ if r.serverips then
66
+ return "#{r.refid} #{r.server} (#{r.txt_ips})"
67
+ end
68
+ return "#{r.refid} #{r.server}"
69
+ end
70
+
71
+ def referral_txt_verbose(r)
72
+ if r.serverips then
73
+ return sprintf("%s [%s] %s (%s) <%s>", r.refid, r.qname, r.server,
74
+ r.txt_ips, r.bailiwick)
75
+ end
76
+ return sprintf("%s [%s] %s <%s>", r.refid, r.qname, r.server,
77
+ r.bailiwick)
78
+ end
79
+
80
+ # TODO: warnings aren't in referral object any more, they are in bubbled up to response object from decoded_query, and there are several for each referral object as each IP address for a referral could have warnings.
81
+ # TODO: display warnings after each response object is created
82
+ def progress_main(args)
83
+ o = args[:state]
84
+ r = args[:referral]
85
+ stage = args[:stage]
86
+ return if r.refid.empty?
87
+ case stage
88
+ when :answer then
89
+ if o[:verbose] then
90
+ for warning in r.warnings do
91
+ puts "#{r.refid} WARNING: #{warning}"
92
+ end
93
+ end
94
+ if o[:allstats] then
95
+ r.stats_display(:prefix => "#{r.refid} Results:", :results => false)
96
+ end
97
+ when :start then
98
+ print o[:verbose] ? referral_txt_verbose(r) : referral_txt_normal(r)
99
+ if r.serverips.nil? then
100
+ print " -- resolving"
101
+ end
102
+ print "\n"
103
+ when :answer_fast then
104
+ print o[:verbose] ? referral_txt_verbose(r) : referral_txt_normal(r)
105
+ puts " -- completed earlier"
106
+ end
107
+ end
108
+
109
+ def progress_resolves(args)
110
+ o = args[:state]
111
+ r = args[:referral]
112
+ stage = args[:stage]
113
+ case stage
114
+ when :start then
115
+ print o[:verbose] ? referral_txt_verbose(r) : referral_txt_normal(r)
116
+ print "\n"
117
+ when :answer_fast then
118
+ print o[:verbose] ? referral_txt_verbose(r) : referral_txt_normal(r)
119
+ puts " -- completed earlier"
120
+ end
121
+ end
122
+
123
+ def require_relative(path)
124
+ require File.join(File.dirname(caller[0]), path.to_str)
125
+ end
126
+
127
+ ### Main program
128
+
129
+ options = Hash.new
130
+ options[:verbose] = false
131
+ options[:debug] = 0
132
+ options[:type] = :a
133
+ options[:root] = nil
134
+ options[:allroots] = false
135
+ options[:broken] = false
136
+ options[:progress] = true
137
+ options[:summary] = true
138
+ options[:resolves] = false
139
+ options[:serverlist] = true
140
+ options[:versions] = true
141
+ options[:domainname] = nil
142
+ options[:follow_aaaa] = false
143
+ options[:root_aaaa] = false
144
+ options[:always_tcp] = false
145
+ options[:allow_tcp] = false
146
+ options[:allstats] = false
147
+ options[:saveobjects] = false
148
+ options[:fast] = false
149
+ options[:udpsize] = 512
150
+ options[:maxdepth] = 10
151
+ options[:retries] = 2
152
+ options[:results] = true
153
+
154
+ opts = OptionParser.new
155
+ 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 }
174
+ 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 }
178
+ begin
179
+ opts.parse!
180
+ if ARGV.size != 1 then
181
+ raise OptionParser::ParseError, "Missing domain name parameter"
182
+ end
183
+ options[:domainname] = ARGV.shift
184
+ rescue OptionParser::ParseError => e
185
+ puts e
186
+ RDoc::usage(1, 'Usage')
187
+ end
188
+ Log.level = options[:debug] > 0 ? Logger::DEBUG : Logger::UNKNOWN
189
+ Log.debug {"Options chosen:\n" }
190
+ Log.debug { options.map {|x,y| " #{x}: #{y}" }.join("\n") }
191
+ args = { :state => options, :aaaa => options[:follow_aaaa],
192
+ :udpsize => options[:udpsize] }
193
+ args[:progress_main] = method(:progress_main) if options[:progress]
194
+ args[:progress_resolve] = method(:progress_resolves) if options[:progress] and options[:resolves]
195
+ args[:loglevel] = options[:debug] >= 1 ? Logger::DEBUG : Logger::UNKNOWN
196
+ args[:libloglevel] = options[:debug] >= 2 ? Logger::DEBUG : Logger::UNKNOWN
197
+ args[:always_tcp] = true if options[:always_tcp]
198
+ args[:allow_tcp] = true if options[:allow_tcp]
199
+ args[:fast] = true if options[:fast]
200
+ begin
201
+ traverser = DNSTraverse::Traverser.new(args)
202
+ if options[:root] then
203
+ root = options[:root]
204
+ rootip = root # XXX fix me need to look up IP address if not passed
205
+ else
206
+ begin
207
+ (root, rootip) = traverser.get_a_root(:aaaa => options[:root_aaaa])
208
+ rescue => e
209
+ $stderr.puts "Failed to find a root: #{e}"
210
+ exit 2
211
+ end
212
+ end
213
+ puts "Using #{root} (#{rootip}) as initial root"
214
+ if options[:allroots] then
215
+ begin
216
+ roots = traverser.find_all_roots(:root => root, :rootip => rootip,
217
+ :aaaa => options[:root_aaaa] )
218
+ rescue => e
219
+ $stderr.puts "Failed to find all roots: #{e}"
220
+ exit 2
221
+ end
222
+ puts "All roots:"
223
+ for aroot in roots do
224
+ puts " #{aroot[:name]} #{aroot[:ips].join(', ')}"
225
+ end
226
+ else
227
+ roots = [ { :name => root, :ips => [ rootip ] } ]
228
+ end
229
+ puts "Running query #{options[:domainname]} type #{options[:type]}"
230
+ result = traverser.run_query(:qname => options[:domainname],
231
+ :qtype => options[:type].to_s, :roots => roots,
232
+ :maxdepth => options[:maxdepth],
233
+ :retries => options[:retries])
234
+ puts if options[:progress]
235
+ if options[:serverlist] then
236
+ puts "The following servers were encountered:"
237
+ fp = options[:versions] ? DNSTraverse::Fingerprint.new : nil
238
+ seen = traverser.servers_encountered
239
+ ss = seen.keys.sort! { |a,b| a.downcase.reverse! <=> b.downcase.reverse! }
240
+ w = 16
241
+ ss.each { |a| w = a.length if a.length > w }
242
+ ss.each do |server|
243
+ for ip in seen[server] do
244
+ ver = ""
245
+ if options[:versions] then
246
+ fpres = fp.fingerprint(ip)
247
+ ver += " #{fpres[:vendor]}" if fpres.has_key?(:vendor)
248
+ ver += " #{fpres[:product]}" if fpres.has_key?(:product)
249
+ ver += " #{fpres[:version]}" if fpres.has_key?(:version)
250
+ ver += " #{fpres[:error]}" if fpres.has_key?(:error)
251
+ end
252
+ printf "%#{w}s: %-15s%s", server, ip, ver
253
+ puts
254
+ end
255
+ end
256
+ puts
257
+ end
258
+ if options[:results] then
259
+ puts "Results:"
260
+ result.stats_display(:results => true, :spacing => true)
261
+ end
262
+ rescue Interrupt => e
263
+ $stderr.puts "Interrupted by user"
264
+ end
265
+ if options[:saveobjects] then
266
+ GC.start
267
+ s = Hash.new
268
+ ObjectSpace.each_object do |o|
269
+ s[o.class]||= 0
270
+ s[o.class]= s[o.class] + 1
271
+ end
272
+ f = File.open("classes.dump", "w")
273
+ s.sort {|a,b| a[1] <=> b[1]}.each do | c |
274
+ f.puts "#{c[1]} #{c[0]}"
275
+ end
276
+ f = File.open("strings.dump", "w")
277
+ ObjectSpace.each_object do |o|
278
+ if o.instance_of? String then
279
+ f.puts o
280
+ end
281
+ end
282
+ f = File.open("hashes.dump", "w")
283
+ ObjectSpace.each_object do |o|
284
+ if o.instance_of? Hash then
285
+ f.puts o.size.to_s
286
+ end
287
+ end
288
+ f = File.open("label.dump", "w")
289
+ ObjectSpace.each_object do |o|
290
+ if o.instance_of? Dnsruby::Name::Label then
291
+ f.puts o.to_s
292
+ end
293
+ end
294
+ f = File.open("referral.dump", "w")
295
+ ObjectSpace.each_object do |o|
296
+ if o.instance_of? DNSTraverse::Referral then
297
+ f.puts o.to_s
298
+ end
299
+ end
300
+ end
data/doc.tar ADDED
Binary file
@@ -0,0 +1,198 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Module: DNSTraverse</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Module</strong></td>
53
+ <td class="class-name-in-header">DNSTraverse</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/dnstraverse/fingerprint_rb.html">
59
+ lib/dnstraverse/fingerprint.rb
60
+ </a>
61
+ <br />
62
+ <a href="../files/lib/dnstraverse/decoded_query_rb.html">
63
+ lib/dnstraverse/decoded_query.rb
64
+ </a>
65
+ <br />
66
+ <a href="../files/lib/dnstraverse/traverser_rb.html">
67
+ lib/dnstraverse/traverser.rb
68
+ </a>
69
+ <br />
70
+ <a href="../files/lib/dnstraverse/decoded_query_cache_rb.html">
71
+ lib/dnstraverse/decoded_query_cache.rb
72
+ </a>
73
+ <br />
74
+ <a href="../files/lib/dnstraverse/response_noglue_rb.html">
75
+ lib/dnstraverse/response_noglue.rb
76
+ </a>
77
+ <br />
78
+ <a href="../files/lib/dnstraverse/referral_rb.html">
79
+ lib/dnstraverse/referral.rb
80
+ </a>
81
+ <br />
82
+ <a href="../files/lib/dnstraverse/response_rb.html">
83
+ lib/dnstraverse/response.rb
84
+ </a>
85
+ <br />
86
+ <a href="../files/lib/dnstraverse/info_cache_rb.html">
87
+ lib/dnstraverse/info_cache.rb
88
+ </a>
89
+ <br />
90
+ <a href="../files/lib/dnstraverse/caching_resolver_rb.html">
91
+ lib/dnstraverse/caching_resolver.rb
92
+ </a>
93
+ <br />
94
+ <a href="../files/lib/dnstraverse/message_utility_rb.html">
95
+ lib/dnstraverse/message_utility.rb
96
+ </a>
97
+ <br />
98
+ </td>
99
+ </tr>
100
+
101
+ </table>
102
+ </div>
103
+ <!-- banner header -->
104
+
105
+ <div id="bodyContent">
106
+
107
+
108
+
109
+ <div id="contextContent">
110
+
111
+ <div id="description">
112
+ <p>
113
+ <a href="DNSTraverse.html">DNSTraverse</a> traverses the DNS to show
114
+ statistics and information Copyright (C) 2008 James Ponder
115
+ </p>
116
+ <p>
117
+ This program is free software: you can redistribute it and/or modify it
118
+ under the terms of the GNU General Public License as published by the Free
119
+ Software Foundation, version 3 of the License.
120
+ </p>
121
+ <p>
122
+ This program is distributed in the hope that it will be useful, but WITHOUT
123
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
124
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
125
+ more details.
126
+ </p>
127
+ <p>
128
+ You should have received a copy of the GNU General Public License along
129
+ with this program. If not, see &lt;<a
130
+ href="http://www.gnu.org/licenses">www.gnu.org/licenses</a>/&gt;.
131
+ </p>
132
+
133
+ </div>
134
+
135
+
136
+ </div>
137
+
138
+
139
+ </div>
140
+
141
+
142
+ <!-- if includes -->
143
+
144
+ <div id="section">
145
+
146
+ <div id="class-list">
147
+ <h3 class="section-bar">Classes and Modules</h3>
148
+
149
+ Module <a href="DNSTraverse/MessageUtility.html" class="link">DNSTraverse::MessageUtility</a><br />
150
+ Module <a href="DNSTraverse/Response.html" class="link">DNSTraverse::Response</a><br />
151
+ Class <a href="DNSTraverse/CachingResolver.html" class="link">DNSTraverse::CachingResolver</a><br />
152
+ Class <a href="DNSTraverse/DecodedQuery.html" class="link">DNSTraverse::DecodedQuery</a><br />
153
+ Class <a href="DNSTraverse/DecodedQueryCache.html" class="link">DNSTraverse::DecodedQueryCache</a><br />
154
+ Class <a href="DNSTraverse/Fingerprint.html" class="link">DNSTraverse::Fingerprint</a><br />
155
+ Class <a href="DNSTraverse/InfoCache.html" class="link">DNSTraverse::InfoCache</a><br />
156
+ Class <a href="DNSTraverse/Referral.html" class="link">DNSTraverse::Referral</a><br />
157
+ Class <a href="DNSTraverse/ResolveError.html" class="link">DNSTraverse::ResolveError</a><br />
158
+ Class <a href="DNSTraverse/Response.html" class="link">DNSTraverse::Response</a><br />
159
+ Class <a href="DNSTraverse/Traverser.html" class="link">DNSTraverse::Traverser</a><br />
160
+
161
+ </div>
162
+
163
+ <div id="constants-list">
164
+ <h3 class="section-bar">Constants</h3>
165
+
166
+ <div class="name-list">
167
+ <table summary="Constants">
168
+ <tr class="top-aligned-row context-row">
169
+ <td class="context-item-name">TYPE_ARRAY_AAAA</td>
170
+ <td>=</td>
171
+ <td class="context-item-value">['AAAA', 'A'].freeze</td>
172
+ </tr>
173
+ <tr class="top-aligned-row context-row">
174
+ <td class="context-item-name">TYPE_ARRAY_A</td>
175
+ <td>=</td>
176
+ <td class="context-item-value">['A'].freeze</td>
177
+ </tr>
178
+ </table>
179
+ </div>
180
+ </div>
181
+
182
+
183
+
184
+
185
+
186
+
187
+ <!-- if method_list -->
188
+
189
+
190
+ </div>
191
+
192
+
193
+ <div id="validator-badges">
194
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
195
+ </div>
196
+
197
+ </body>
198
+ </html>