class AuthSOA(pypacker.Packet): """ Auth type SOA. Not used atm """ __hdr__ = (("name", "H", 0), ("type", "H", 0), ("cls", "H", 0), ("ttl", "I", 0), ("dlen", "H", 0), ("name2", None, b"\x03www\x04test\x03com\x00"), ("mailbox", None, b"\x03www\x04test\x03com\x00"), ("pserver", "H", 0), ("mbox", "H", 0), ("serial", "H", 0), ("refresh", "H", 0), ("retry", "H", 0), ("expire", "H", 0), ("minttl", "H", 0)) name_s = pypacker.get_property_dnsname("name") mailbox_s = pypacker.get_property_dnsname("mailbox") def _dissect(self, buf): # set format # find server name by 0-termination idx = buf.find(b"\x00", 12) # logger.debug(buf[12: idx+1]) # don't add trailing \0 self.name = buf[12:idx + 1] # logger.debug("name: %s" % buf[idx + 1: -14]) self.mailbox = buf[idx + 1:-14] return len(buf)
class Auth(pypacker.Packet): """Auth, generic type.""" __hdr__ = ( ("name", "H", 0), ("type", "H", 0), ("cls", "H", 0), ("ttl", "I", 0), ( "dlen", "H", 0 ), # length of the rest of header: server + x, x becmoes body content ("server", None, b"\x03www\x04test\x03com\x00") # TODO: add fields for mailbox, serial, refresh etc. ) server_s = pypacker.get_property_dnsname("server") def _dissect(self, buf): # needed set format # find server name by 0-termination idx = buf.find(b"\x00", 12) if idx == -1: idx = len(buf) self.server = buf[12:idx + 1] # logger.debug("server: %s" % self.server) return idx + 1
class Auth(pypacker.Packet): """Auth, generic type.""" __hdr__ = ( ("name", "H", 0), ("type", "H", 0), ("cls", "H", 0), ("ttl", "I", 0), ( "dlen", "H", 0 ), # length of the rest of header: server + x, x becmoes body content ("server", None, b"\x03www\x04test\x03com\x00")) server_s = pypacker.get_property_dnsname( "server", cb_mc_bytes=get_bts_for_msg_compression) def _dissect(self, buf): # Needed set format # Find server name by 0-termination off_end = buf.find(b"\x00", 12) if off_end == -1: off_end = len(buf) else: off_end += 1 self.server = buf[12:off_end] #logger.debug("server: %s" % self.server) return off_end
class Query(pypacker.Packet): """DNS question.""" __hdr__ = (("name", None, b"\x03www\x04test\x03com\x00"), ("type", "H", DNS_A), ("cls", "H", DNS_IN)) name_s = pypacker.get_property_dnsname("name") def _dissect(self, buf): q_end = DNS.get_dns_length(buf) self.name = buf[:q_end] #logger.debug("val / format: %s %s" % (self._name, self._name_format)) return len(buf) # name (including 0) + type + cls
class Answer(MessageCompression): """DNS resource record.""" __hdr__ = ( ("name", None, b"\xc0\x0c"), ("type", "H", DNS_A), ("cls", "H", DNS_IN), ("ttl", "I", 180), ("dlen", "H", 4), # length of the next field ("address", None, b"1234") # eg IPv4 ) name_s = pypacker.get_property_dnsname("name") address_s = pypacker.get_property_dnsname("address") def _dissect(self, buf): name_end = DNS.get_dns_length(buf) self.name = buf[:name_end] # needed set format start = name_end + 8 addr_len = unpack_H(buf[start:start + 2])[0] self.address = buf[start + 2:start + 2 + addr_len] # logger.debug("address: %s" % self.address) return start + 2 + addr_len
class Answer(pypacker.Packet): """DNS resource record.""" __hdr__ = ( ("name", None, b"\xc0\x0c"), ("type", "H", DNS_A), ("cls", "H", DNS_IN), ("ttl", "I", 180), ("dlen", "H", 4), # length of the next field ("address", None, b"1234") # eg IPv4 ) name_s = pypacker.get_property_dnsname( "name", cb_mc_bytes=get_bts_for_msg_compression) def _get_address_readable(self): if self.type == DNS_A: return pypacker.ip4_bytes_to_str(self.address) elif self.type == DNS_AAAA: return pypacker.ip6_bytes_to_str(self.address) elif self.type == DNS_CNAME: return pypacker.dns_name_decode(self.address) else: # Unknown type return "" address_s = property(_get_address_readable) def _dissect(self, buf): name_end = DNS.get_dns_length(buf) self.name = buf[:name_end] # needed set format start = name_end + 8 addr_len = unpack_H(buf[start:start + 2])[0] self.address = buf[start + 2:start + 2 + addr_len] #logger.debug("address: %s" % self.address) return start + 2 + addr_len