qr: 0表示查詢報文,1表示響應報文
opcode: 通常值為0(標准查詢),其他值為1(反向查詢)和2(服務器狀態請求)。
aa: 表示授權回答(authoritative answer)
tc: 表示可截斷的(truncated)
rcode: 返回碼,通常為0(沒有差錯)和3(名字差錯)表示期望遞歸
ra: 表示可用遞歸
z: 隨后3bit必須為0(保留字段)
rcode: 返回碼,通常為0(沒有差錯)和3(名字差錯)
qd 問題部分
an 回答部分
ns 管理機構部分和
ar 附加信息部分
qd 它有三部分組成:
qname(詢問域名,比如說www.sina.com它由一個或者多個標示符序列組成。每個標示符已首字節數的計數值來說明該標示符長度,每個名字以0結束。計數字節數必須是0~63之間。該字段無需填充字節。
qtype(詢問類型,表示希望得到什么類型的回答),通常設為A,表示是由域名獲得該域名的IP地址,當然還有其他的類型,這里不作介紹。
qclass(詢問類),此處一般為IN,表示為Internet名字空間,別的類這里不作介紹。
后面的 an(回答部分),ns(管理機構部分),ar(附加信息部分),這三部分作為DNS請求包來說一般是不用寫的,為空。
標准DNS字段如下:
>>> ls(DNS)
length : ShortField (Cond) = (None)
id : ShortField = (0)
qr : BitField (1 bit) = (0)
opcode : BitEnumField (4 bits) = (0)
aa : BitField (1 bit) = (0)
tc : BitField (1 bit) = (0)
rd : BitField (1 bit) = (1)
ra : BitField (1 bit) = (0)
z : BitField (1 bit) = (0)
ad : BitField (1 bit) = (0)
cd : BitField (1 bit) = (0)
rcode : BitEnumField (4 bits) = (0)
qdcount : DNSRRCountField = (None)
ancount : DNSRRCountField = (None)
nscount : DNSRRCountField = (None)
arcount : DNSRRCountField = (None)
qd : DNSQRField = (None)
an : DNSRRField = (None)
ns : DNSRRField = (None)
ar : DNSRRField = (None)