Class: PacketGen::Header::DNS
- Defined in:
- lib/packetgen/header/dns.rb,
lib/packetgen/header/dns.rb,
lib/packetgen/header/dns/rr.rb,
lib/packetgen/header/dns/opt.rb,
lib/packetgen/header/dns/name.rb,
lib/packetgen/header/dns/option.rb,
lib/packetgen/header/dns/question.rb,
lib/packetgen/header/dns/qdsection.rb,
lib/packetgen/header/dns/rrsection.rb
Overview
DNS: Domain Name Service
A DNS packet consists of a header:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
A DNS packet also contains up to 4 sections:
Direct Known Subclasses
Defined Under Namespace
Classes: ArrayOfOptions, Name, OPT, Option, QDSection, Question, RR, RRSection
Constant Summary collapse
- UDP_PORT =
Port number for DNS over UDP
53
- TCP_PORT =
Port number for DNS over TCP
UDP_PORT
- OPCODES =
DNS opcodes
{ 'query' => 0, 'iquery' => 1, 'status' => 2, 'notify' => 4, 'update' => 5 }.freeze
- RCODES =
DNS Response codes
{ 'ok' => 0, 'no-error' => 0, 'format-error' => 1, 'server-failure' => 2, 'name-error' => 3, 'not-implemented' => 4, 'refused' => 5 }.freeze
Instance Attribute Summary collapse
-
#aa ⇒ Boolean
Authoritative answer.
-
#ad ⇒ Boolean
Authentic Data.
-
#an ⇒ RRSection
Answer section.
-
#ancount ⇒ Integer
Number of ressource recors in answer section.
-
#ar ⇒ RRSection
Additional record section.
-
#arcount ⇒ Integer
Number of ressources recors in additional records section.
-
#cd ⇒ Boolean
Checking Disabled.
-
#id ⇒ Integer
16-bit identifier to match up replies and queries.
-
#ns ⇒ RRSection
Authority records section.
-
#nscount ⇒ Integer
Number of name resource recors in authority records section.
-
#opcode ⇒ Integer
Kind of query.
-
#qd ⇒ QDSection
Question section.
-
#qdcount ⇒ Integer
Number of entries in question section.
-
#qr ⇒ Boolean
Query (
false
) or response (true
). -
#ra ⇒ Boolean
Recursion Available.
-
#rcode ⇒ Integer
Response code.
-
#rd ⇒ Boolean
Recursion Desired.
-
#tc ⇒ Boolean
Truncation.
- #u16 ⇒ Integer
Instance Method Summary collapse
- #inspect ⇒ String
-
#query? ⇒ Boolean
Is message a query.
-
#response? ⇒ Boolean
Is message a response.
Methods inherited from Base
bind, calculate_and_set_length, #header_id, inherited, #initialize, #ip_header, #ll_header
Methods included from PacketGen::Headerable
#added_to_packet, included, #method_name, #packet, #packet=, #parse?, #protocol_name, #read, #to_s
Constructor Details
This class inherits a constructor from PacketGen::Header::Base
Instance Attribute Details
#aa ⇒ Boolean
Returns Authoritative answer.
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#ad ⇒ Boolean
Returns Authentic Data.
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#an ⇒ RRSection
Answer section
199 |
# File 'lib/packetgen/header/dns.rb', line 199 define_attr :an, RRSection, builder: ->(h, t) { t.new(h, h[:ancount]) } |
#ancount ⇒ Integer
Number of ressource recors in answer section
183 |
# File 'lib/packetgen/header/dns.rb', line 183 define_attr :ancount, BinStruct::Int16 |
#ar ⇒ RRSection
Additional record section
207 |
# File 'lib/packetgen/header/dns.rb', line 207 define_attr :ar, RRSection, builder: ->(h, t) { t.new(h, h[:arcount]) } |
#arcount ⇒ Integer
Number of ressources recors in additional records section
191 |
# File 'lib/packetgen/header/dns.rb', line 191 define_attr :arcount, BinStruct::Int16 |
#cd ⇒ Boolean
Returns Checking Disabled.
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#id ⇒ Integer
16-bit identifier to match up replies and queries
152 |
# File 'lib/packetgen/header/dns.rb', line 152 define_attr :id, BinStruct::Int16 |
#ns ⇒ RRSection
Authority records section
203 |
# File 'lib/packetgen/header/dns.rb', line 203 define_attr :ns, RRSection, builder: ->(h, t) { t.new(h, h[:nscount]) } |
#nscount ⇒ Integer
Number of name resource recors in authority records section
187 |
# File 'lib/packetgen/header/dns.rb', line 187 define_attr :nscount, BinStruct::Int16 |
#opcode ⇒ Integer
Returns Kind of query. See OPCODES.
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#qd ⇒ QDSection
Question section
195 |
# File 'lib/packetgen/header/dns.rb', line 195 define_attr :qd, QDSection, builder: ->(h, t) { t.new(h, h[:qdcount]) } |
#qdcount ⇒ Integer
Number of entries in question section
179 |
# File 'lib/packetgen/header/dns.rb', line 179 define_attr :qdcount, BinStruct::Int16 |
#qr ⇒ Boolean
Returns query (false
) or response (true
).
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#ra ⇒ Boolean
Returns Recursion Available.
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#rcode ⇒ Integer
Returns Response code. See RCODES.
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#rd ⇒ Boolean
Returns Recursion Desired.
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#tc ⇒ Boolean
Returns Truncation.
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
#u16 ⇒ Integer
173 |
# File 'lib/packetgen/header/dns.rb', line 173 define_bit_attr :u16, qr: 1, opcode: 4, aa: 1, tc: 1, rd: 1, ra: 1, z: 1, ad: 1, cd: 1, rcode: 4 |
Instance Method Details
#inspect ⇒ String
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
# File 'lib/packetgen/header/dns.rb', line 254 def inspect super do |attr| next unless attr == :u16 str = inspect_flags str << Inspect.shift_level opcode = '%-16s (%u)' % [OPCODES.key(self.opcode), self.opcode] str << Inspect::FMT_ATTR % ['Integer', 'opcode', opcode] str << Inspect.shift_level rcode = '%-16s (%u)' % [RCODES.key(self.rcode), self.rcode] str << Inspect::FMT_ATTR % ['Integer', 'rcode', rcode] end end |
#query? ⇒ Boolean
Is message a query
249 250 251 |
# File 'lib/packetgen/header/dns.rb', line 249 def query? !qr? end |
#response? ⇒ Boolean
Is message a response
243 244 245 |
# File 'lib/packetgen/header/dns.rb', line 243 def response? qr? end |