def __init__(self, data, packet_s, names): if data.startswith('\0'): name = '.' ptr = None total_read = 1 else: name, ptr = convert.dns_string(data) total_read = len(name) + 2 if ptr is not None: parts = [name] if name else [] extra = convert.dns_to_string(packet_s[ptr:], packet_s) if extra is not None: parts += [extra] if extra else [] name = '.'.join(parts) else: name = None if name: data = data[total_read:] rdata_len = convert.u16(data[8:10]) ok = len(data) >= 10 + rdata_len else: rdata_len = None ok = False self.question = name if ok else None self.querytype = convert.u16(data[:2]) if ok else None self.queryclass = convert.u16(data[2:4]) if ok else None self.ttl = convert.u32(data[4:8]) if ok else None self.rdata = data[10:10+rdata_len] if ok else None self._len = (total_read + 10 + rdata_len) if ok else None
def __init__(self, data, packet_s, names): if data.startswith('\0'): name = '.' ptr = None total_read = 1 else: name, ptr = convert.dns_string(data) total_read = len(name) + 2 if ptr is not None: parts = [name] if name else [] extra = convert.dns_to_string(packet_s[ptr:], packet_s) if extra is not None: parts += [extra] if extra else [] name = '.'.join(parts) else: name = None if name: data = data[total_read:] rdata_len = convert.u16(data[8:10]) ok = len(data) >= 10 + rdata_len else: rdata_len = None ok = False self.question = name if ok else None self.querytype = convert.u16(data[:2]) if ok else None self.queryclass = convert.u16(data[2:4]) if ok else None self.ttl = convert.u32(data[4:8]) if ok else None self.rdata = data[10:10 + rdata_len] if ok else None self._len = (total_read + 10 + rdata_len) if ok else None
def __init__(self, data, packet_s, names): name, ptr = convert.dns_string(data) total_read = len(name) + 2 if ptr is not None: parts = [name] if name else [] extra = convert.dns_to_string(packet_s[ptr:], packet_s) if extra is not None: parts += [extra] if extra else [] name = '.'.join(parts) else: name = None if name: data = data[total_read:] ok = len(data) >= 4 else: data = '' ok = False ok = len(data) >= 4 self.question = name if ok else None self.querytype = convert.u16(data[:2]) if ok else None self.queryclass = convert.u16(data[2:4]) if ok else None self._len = (total_read + 4) if ok else None
def __init__(self, data, packet_s, names): total_read, name = convert.dns_to_string_info(data, packet_s) if name: data = data[total_read:] ok = len(data) >= 4 else: data = '' ok = False self.question = name if ok else None self.querytype = convert.u16(data[:2]) if ok else None self.queryclass = convert.u16(data[2:4]) if ok else None self._len = (total_read + 4) if ok else None
def __init__(self, data, packet_s, names): if data.startswith('\0'): name = '.' ptr = None total_read = 1 else: total_read, name = convert.dns_to_string_info(data, packet_s) if name: data = data[total_read:] rdata_len = convert.u16(data[8:10]) ok = len(data) >= 10 + rdata_len else: rdata_len = None ok = False self.question = name if ok else None self.querytype = convert.u16(data[:2]) if ok else None self.queryclass = convert.u16(data[2:4]) if ok else None self.ttl = convert.u32(data[4:8]) if ok else None self.rdata = data[10:10+rdata_len] if ok else None self._len = (total_read + 10 + rdata_len) if ok else None
def __init__(self, packet_s): self.identifier = convert.u16(packet_s[0:2]) # 16 bits flags = convert.u16(packet_s[2:4]) # 16 bits self.qr = flags >> 15 # query/response (enum) # 10000000 00000000 self.opcode = (flags >> 11) & 15 # opcode (enum) # 01111000 00000000 self.aa = (flags >> 10) & 1 # authoritative (bool) # 00000100 00000000 self.tc = (flags >> 9) & 1 # truncated (bool) # 00000010 00000000 self.rd = (flags >> 8) & 1 # recursion desired (bool) # 00000001 00000000 self.ra = (flags >> 7) & 1 # recursion available (bool) # 00000000 10000000 self.z = (flags >> 6) & 1 # no idea - rfc2929 2.1 # 00000000 01000000 self.ad = (flags >> 5) & 1 # authenticated (bool) # 00000000 00100000 self.cd = (flags >> 4) & 1 # checking disabled (bool) # 00000000 00010000 self.rcode = flags & 1 # return code # 00000000 00001111 self.query_len = convert.u16(packet_s[4:6]) # no. of queries self.response_len = convert.u16(packet_s[6:8]) # no. of answer RRs self.authority_len = convert.u16(packet_s[8:10]) # no. of authority RRs self.additional_len = convert.u16(packet_s[10:12]) # no. of additional RRs