Example #1
0
 def from_packet(packet):
     header = DNSHeader.from_packet(packet)
     # 12 is fixed because header is always 12 octets
     offset = 12
     question = []
     answer = []
     authority = []
     additional = []
     for count, section, rrclass in zip([header.qdcount,
                                         header.ancount,
                                         header.nscount,
                                         header.arcount],
                                        [question,
                                         answer,
                                         authority,
                                         additional],
                                        [DNSQuestionRR,
                                         DNSRR,
                                         DNSRR,
                                         DNSRR]):
         for i in range(0, count):
             rr, newoffset = rrclass.from_packet(packet, offset)
             if isinstance(rr, DNSRR) and rr.typ == dns_type_to_int('OPT'):
                 rr, newoffset = DNSOptRR.from_packet(packet, offset)
             offset = newoffset
             section.append(rr)
     return DNSMessage(header,
                       question,
                       answer,
                       authority,
                       additional)
Example #2
0
 def canonical_l1(self, ttl):
     rdata = bytearray()
     for part in self.address.split('.'):
         rdata.append(int(part))
     return DNSRR(self.name.lower(),
                  dns_type_to_int(self.typ),
                  dns_class_to_int('IN'),
                  ttl,
                  4,
                  rdata,
                  None,
                  None)
Example #3
0
 def canonical_l1(self, ttl):
     rdata = bytearray()
     rdata.extend(pack('! H B B',
                       self.keytag,
                       dnssec_algorithm_to_int(self.algorithm),
                       dnssec_digest_type_to_int(self.digest_type)))
     rdata.extend(self.digest)
     return DNSRR(self.name.lower(),
                  dns_type_to_int(self.typ),
                  dns_class_to_int('IN'),
                  ttl,
                  len(rdata),
                  rdata,
                  None,
                  None)
Example #4
0
 def canonical_l1(self, ttl):
     rdata = bytearray()
     rdata.extend(pack('! H B B',
                       self.flags,
                       3,
                       dnssec_algorithm_to_int(self.algorithm)))
     rdata.extend(self.public_key)
     return DNSRR(self.name.lower(),
                  dns_type_to_int(self.typ),
                  dns_class_to_int('IN'),
                  ttl,
                  len(rdata),
                  rdata,
                  None,
                  None)
Example #5
0
 def to_rr(self):
     b = bytearray()
     b.extend(pack('! H B B',
                   self.keytag,
                   dnssec_algorithm_to_int(self.algorithm),
                   dnssec_digest_type_to_int(self.digest_type)))
     b.extend(self.digest)
     return DNSRR(self.name,
                  dns_type_to_int(self.typ),
                  dns_class_to_int(self.clas),
                  self.ttl,
                  len(b),
                  b,
                  None,
                  None)
Example #6
0
 def canonical_l1(self, ttl):
     rdata = bytearray()
     rdata.extend(encode_name(self.mname))
     rdata.extend(encode_name(self.rname))
     rdata.extend(pack('! I I I I I',
                       self.serial,
                       self.refresh,
                       self.retry,
                       self.expire,
                       self.minimum))
     return DNSRR(self.name.lower(),
                  dns_type_to_int(self.typ),
                  dns_class_to_int('IN'),
                  ttl,
                  len(rdata),
                  rdata,
                  None,
                  None)
Example #7
0
def make_query_message(qname,
                       qtype,
                       qclass,
                       rd,
                       cd,
                       udp_payload_size,
                       dnssec_ok=False):
    msgid = random_dns_message_id()
    qrr = DNSQuestionRR(qname, dns_type_to_int(qtype),
                        dns_class_to_int(qclass))
    if udp_payload_size is not None:
        opt_rr = DNSOptRR(udp_payload_size, 0, 0, dnssec_ok, [])
    else:
        opt_rr = None
    dns_message = DNSMessage(
        DNSHeader(msgid,
                  DNSFlags(False, 0, False, False, rd, False, False, cd, 0), 1,
                  0, 0, 1 if opt_rr else 0), [qrr], [], [],
        [opt_rr] if opt_rr is not None else [])
    return dns_message