split parse_header()
This commit is contained in:
parent
4cc979b998
commit
2306add1df
1 changed files with 25 additions and 12 deletions
|
@ -164,21 +164,34 @@ def parse_record(data, offset, question=False):
|
||||||
return nlen + 4, (name, None, record_type, record_class, None, None)
|
return nlen + 4, (name, None, record_type, record_class, None, None)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_header(data):
|
||||||
|
if len(data) >= 12:
|
||||||
|
header = struct.unpack('!HBBHHHH', data[:12])
|
||||||
|
res_id = header[0]
|
||||||
|
res_qr = header[1] & 128
|
||||||
|
res_tc = header[1] & 2
|
||||||
|
res_ra = header[2] & 128
|
||||||
|
res_rcode = header[2] & 15
|
||||||
|
# assert res_tc == 0
|
||||||
|
# assert res_rcode in [0, 3]
|
||||||
|
res_qdcount = header[3]
|
||||||
|
res_ancount = header[4]
|
||||||
|
res_nscount = header[5]
|
||||||
|
res_arcount = header[6]
|
||||||
|
return (res_id, res_qr, res_tc, res_ra, res_rcode, res_qdcount,
|
||||||
|
res_ancount, res_nscount, res_arcount)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def parse_response(data):
|
def parse_response(data):
|
||||||
try:
|
try:
|
||||||
if len(data) >= 12:
|
if len(data) >= 12:
|
||||||
header = struct.unpack('!HBBHHHH', data[:12])
|
header = parse_header(data)
|
||||||
# res_id = header[0]
|
if not header:
|
||||||
# res_qr = header[1] & 128
|
return None
|
||||||
res_tc = header[1] & 2
|
res_id, res_qr, res_tc, res_ra, res_rcode, res_qdcount, \
|
||||||
# res_ra = header[2] & 128
|
res_ancount, res_nscount, res_arcount = header
|
||||||
res_rcode = header[2] & 15
|
|
||||||
# assert res_tc == 0
|
|
||||||
# assert res_rcode in [0, 3]
|
|
||||||
res_qdcount = header[3]
|
|
||||||
res_ancount = header[4]
|
|
||||||
res_nscount = header[5]
|
|
||||||
res_arcount = header[6]
|
|
||||||
qds = []
|
qds = []
|
||||||
ans = []
|
ans = []
|
||||||
offset = 12
|
offset = 12
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue