DNS应答包中的C00C

近日在分析DNS应答包的过程中发现一个有趣的现象——本应该显示域名的字段中频繁出现"0xC00C",或者其他以“C0”开头的两字节。查协议得知原来这是DNS协议消息压缩技术,使用偏移指针代替重复的字符串。该指针用两个8bit表示,具体规定如下:

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    | 1  1|                OFFSET                   |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

最开始的两个bit必须都为1,目的是为了避免混淆。后面的14bit表示字符串在整个DNS消息包中的偏移量。由于DNS应答包中的Answers段出现的域名往往在Queries中已经出现,因此后面只需使用其偏移量表示即可。显然,Queries中的域名出现的频率最高,而其中第一个出现的域名偏移量固定为12字节(00001100),加上最开始的两个1,那二进制就是

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    | 1 1 | 0  0  0  0  0  0  0  0  0  0  1  1  0  0|
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

即0xC00C。以此类推,因最开始出现的字符串都比较靠前,因此指针大多以“C0”开头。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章