示例#1
0
文件: codec.py 项目: ema/exaproxy
	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
示例#2
0
    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
示例#3
0
文件: codec.py 项目: ema/exaproxy
	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
示例#4
0
    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
示例#5
0
	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
示例#6
0
	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
示例#7
0
文件: codec.py 项目: ema/exaproxy
	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
示例#8
0
	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