检索DNS标志信息(十六进制格式)

时间:2015-08-13 06:08:46

标签: python scapy

我已经使用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

2 个答案:

答案 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

如果要输出此值的十六进制表示,可以使用hex()format()函数。

答案 1 :(得分:1)

DNS标志对应于第3个字节和第4个字节。您可以使用以下内容: bytes(packet[DNS])[2:4] # Use str if you are on scapy version < 3

如果您使用它手动输入图形工具,您可以通过打印字节轻松查看值。或者您可以使用struct.unpack将其转换为整数,您可以使用十六进制转换为十六进制。