| Class | Net::DNS::Question |
| In: |
lib/net/dns/question.rb
|
| Parent: | Object |
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.
Some error classes has been defined for the Net::DNS::Header class, which are listed here to keep a light and browsable main documentation. We have:
Copyright (c) 2006 Marco Ceresa
All rights reserved. This program is free software; you may redistribute it and/or modify it under the same terms as Ruby itself.
If not specified, type and cls arguments defaults to Net::DNS::A and Net::DNS::IN respectively.
# File lib/net/dns/question.rb, line 85 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 99 def self.parse(arg) if arg.kind_of? String o = allocate o.send(:new_from_binary,arg) o else raise QuestionArgumentError, "Wrong argument format, must be a String" end 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 132 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 += "\000" [[str,@qType.to_i,@qClass.to_i].pack("a*nn"),offset,names] end