我已经使用scapy尽可能多地检索DNS信息,但我想知道该怎么做以获取DNS标记信息。
以下是我从Scapy检索的信息,但我不知道如何将其转换为Hexa十进制格式,因为我对DNS标志不太熟悉。
id = 1
qr = 0L
opcode = QUERY
aa = 0L
tc = 0L
rd = 0L
ra = 0L
z = 0L
rcode = ok
qdcount = 1
ancount = 0
nscount = 0
arcount = 0
答案 0 :(得分:1)
在DNS protocol中,标志被打包成16位值,如下所示:
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| qr | opcode | aa | tc | rd | ra | z | rcode |
有关详细信息,请参阅here。
您可以在Python中构建此值,如下所示:
flags = (qr << 15) | (opcode << 11) | (aa << 10) | (tc << 9) | (rd << 8) | (ra << 7) | (z << 4) | rcode
答案 1 :(得分:1)
DNS标志对应于第3个字节和第4个字节。您可以使用以下内容:
bytes(packet[DNS])[2:4] # Use str if you are on scapy version < 3
如果您使用它手动输入图形工具,您可以通过打印字节轻松查看值。或者您可以使用struct.unpack将其转换为整数,您可以使用十六进制转换为十六进制。