07. DNS 域名解析 ❀ 数据包分析工具 Wireshark

来源:互联网 发布:浏览器无法连接网络 编辑:程序博客网 时间:2024/06/16 00:09

        【简介】DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。


  捕获 DNS 数据包

        当客户端尝试访问互联网的某个网站时,访问请求会通过一台DNS服务器发送出去。这台DNS服务器会查找自己包含的资源记录,找到对应的IP地址并返回。


        ① 电脑上网的时候网卡都要设置DNS服务器IP地址,通过DNS服务器来查询网站的IP地址。DNS服务器可以是内网自建,也可以是外网公用。电信、移动等宽带都会根据不同地域,指定不同的DNS服务器IP地址。例如深圳电信常用的DNS地址就是202.96.134.133。当然也可以使用114.114.114.114或8.8.8.8公用DNS服务器地址,这样不同运营商的宽带都可以正常获取到IP地址。


        ② 启动 Wireshark,选择上网的网卡接口,点击捕获图标开始捕获。

        ③ 打开浏览器,这里我们访问美国飞塔的网站。


        ④ 在分析之前我们关闭捕获,以免抓到的包越来越多。


        ⑤ 在显示过滤器中输入过滤条件,得到我们要分析的DNS包。

  DNS 数据包分析

  在想象中,我们向DNS发送一个查询请求,然后回传一个IP地址,DNS的工作就算是完了。

        ① 实际上发送和回传的可并不只一次,客户端每发送一条查询消息,都会得到DNS服务器的响应。我们可以看到有个十六进制的号,使得发送和响应一一对应。

        ② 我们首先来查看0x54d1发送包,和其它包一样,最前面是14个字节为以太网帧头,然后是20字节的IP帧头,这里就不再描述了, 这里看到的是8个字节的用户数据报文协议(指定了源和目标端口),30字节的域名解析查询。

        Transaction ID(交易口):这个数值的作用是将一个域名查询消息和对应的响应消息对应起来。

        query/response(查询/响应):每个DNS数据包都会被标记为查询消息或者响应消息,具体哪一类取决于消息中包含的内容。

        Flags(标记):每个查询和响应消息都有不同的标记位置位。

        Response(响应):标识该消息为查询消息还是响应消息。

        Opcode(操作码):这个标记决定了查询消息的类型。Opcode范围是0~15。

Opcode 值描    述0标准查询1逆向查询2服务器状态请求3未分配4通告5更新6~15未分配

        Truncated(截断):这个标记决定了如果数据包过大(大于512字节)时,是否对数据包进行截断。

        Recursion desired(期望递归):如果要所查的记录不存在,那么客户端发送的消息就会从一台DNS服务器到另一台DNS服务器这样执行一个递归的搜索流程。

        Type(类型):这个字段显示的是查询的类型。

类    型描    述A主机地址NS域名服务器MX邮件交互SOA起始授权机构PTR指针记录AAAAIPv6 地址AXFR全量传输IXFR增量传输

        ③ 再看0x54d1响应包,8个字节的用户数据报文协议,46字节的域名解析响应,比查询包多16字节,也就是查询反馈内容。

        Reply code(应答码):这个字段的值用来表示是否出现了错误,以及错误的类型。

Code (代码)描    述0没有错误1格式错误2服务器故障3域名错误4未使用5拒绝

        Questions(问题):表示数据包中包含的查询数量。

        Answers RRs(回答):表示对查询消息所作响应的数量。

        Authority RRs(授权):表示响应消息中授权资源记录的数量。

        Additional RRs(额外):表示响应消息中额外资源记录的数量。

        Answer(回答):对查询消息所作的响应。响应消息也可以有很多个。

  多个 DNS 查询

        我们看到,在浏览器里输入网站地址后,DNS出现多对查询与响应消息,它们之间有什么不同呢?


        ① 由于响应消息往往包含了查询消息,这里我们就直接查看0xa105的响应包。前面0x43d1查询的是 fortinet.com ,而这个包查询的是www.fortinet.com,并且得到了三个响应。除了两个类型为A(主机地址)外,还有一个类型为CNAME(Canonical Name 规范名称),通常称别名指向,它可以将你注册的不同域名统统转到一个主域名上去!与A记录不同的是,CNAME别名记录设置的可以是一个域名的描述而不一定是IP地址!


        ② 0xa105的响应包里有三个响应,两个直接得到了IP地址,另一个得到的是CNAME,我们在0x52c7里看到,再次查询了这个CNAME地址,得到两个与0xa105包相同的IP地址。


        ③ 0x46de的响应包可以看到,查询类询为AAAA,也就是IPv6地址,这里得到了一个IPv6地址。

        ④ 0xe14b的响应包可以看到,通过查询得到的CNAME,再次查询并得到两个IPv6地址。

   

        ⑤ 经过比较,0x71c1与我们最早分析的0x54d1查询和响应的信息完全一致。看上去象是查询了两次fortinet.com。

        总结

        查询 fortinet.com 二次

        查询 www.fortinet.com 一次

        查询 fortinet.com IPv6 一次

        查询 fortinet.com CNAME 一次

        查询 fortinet.com CNAME IPv6 一次

  DNS 查询报错

        很多情况下输入的网址不对,查询不到IP,看看会怎么样。


        ① 这里我们将fortinet.com 的网址多加一个t,打不开网站。


        ② 查看抓取到的DNS响应包,可以看到响应编码是3,也就是域名错误。如果网卡指定了两个DNS服务器,在第一个DNS服务器查找不到的情况下,会自动到第二个DNS服务器查询。


老梅子   QQ:57389522



阅读全文
0 0
原创粉丝点击