Net::DNS::Question - DNS packet question class
require 'net/dns/question'
This class represent the Question portion of a DNS packet. The number of question entries is stored in the qdCount variable of an Header object.
A new object can be created passing the name of the query and the type of answer desired, plus an optional argument containing the class:
question = Net::DNS::Question.new("google.com.", Net::DNS::A) #=> "google.com. A IN"
Alternatevly, a new object is created when processing a binary packet, as when an answer is received. To obtain the binary data from a question object you can use the method Question#data:
question.data #=> "\006google\003com\000\000\001\000\001"
A lot of methods were written to keep a compatibility layer with the Perl version of the library, as long as methods name which are more or less the same.
If not specified, type and cls arguments defaults to Net::DNS::A and Net::DNS::IN respectively.
# File lib/net/dns/question.rb, line 67 def initialize(name, type = Net::DNS::A, cls = Net::DNS::IN) @qName = check_name name @qType = Net::DNS::RR::Types.new(type) @qClass = Net::DNS::RR::Classes.new(cls) end
Return a new Net::DNS::Question object created by parsing binary data, such as an answer from the nameserver.
question = Net::DNS::Question.parse(data) puts "Queried for #{question.qName} type #{question.qType.to_s}" #=> Queried for example.com type A
# File lib/net/dns/question.rb, line 81 def self.parse(arg) o = allocate o.send(:new_from_binary, arg.to_s) o end
Return the binary data of the objects, plus an offset and an Hash with references to compressed names. For use in Net::DNS::Packet compressed packet creation.
# File lib/net/dns/question.rb, line 99 def comp_data arr = @qName.split(".") str = pack_name(@qName) string = "" names = {} offset = Net::DNS::HFIXEDSZ arr.size.times do |i| x = i+1 elem = arr[-x] len = elem.size string = ((string.reverse)+([len,elem].pack("Ca*")).reverse).reverse names[string] = offset offset += len end offset += 2 * Net::DNS::INT16SZ str += "\0000" [[str,@qType.to_i,@qClass.to_i].pack("a*nn"),offset,names] end
Outputs binary data from a Question object
question.data #=> "\006google\003com\000\000\001\000\001"
# File lib/net/dns/question.rb, line 92 def data [pack_name(@qName),@qType.to_i,@qClass.to_i].pack("a*nn") end
Returns a printable version of question with nice formatting.
q = Net::DNS::Question.new("google.com.", Net::DNS::A) q.inspect # => "google.com. IN A "
# File lib/net/dns/question.rb, line 128 def inspect if @qName.size > 29 then len = @qName.size + 1 else len = 29 end [@qName, @qClass.to_s, @qType.to_s].pack("A#{len} A8 A8") end
Generated with the Darkfish Rdoc Generator 2.