golang实现dns域名解析(三):响应报文分析

前面说了构造请求发送报文,接下来我们好好研究下如何解析服务器端发回来的应答信息。

首先还是用前面的程序代码发一个请求,用抓包工具看看应答的内容有哪些:

  截图的第一部分是返回信息的统计,表明这个返回的包数据包含一个问题,5个权威应答,5个附加信息。第二部分是问题的内容,第三部分是权威应答的内容,第四部分是附加信息的内容。再往下面就是接收到的原始数据的展示,这里需要提及的一点就是为了减小报文,域名系统使用一种压缩方法来消除报文中域名的重复。使用这种方法,后面重复出现的域名或者labels被替换为指向之前出现位置的指针。

  指针占用2个字节,格式如下:

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+--+--+--+--+--+--+--+--+--+--+--+--+--

| 1 1|                OFFSET                   |

+--+--+--+--+--+--+--+--+--+--+--+--+--

  前两个比特位都为1。因为lablels限制为不多于63个字节,所以label的前两位一定为0,这样就可以让指针与label进行区分。(10 和 01 组合保留,以便日后使用) 。偏移值(OFFSET)表示从报文开始的字节指针。偏移量为0表示ID字段的第一个字节。

  压缩方法让报文中的域名成为:

    - 以0结尾的labels序列

    - 一个指针

    - 指针结尾的labels序列

  不理解的往下面看,我选中的这部分是权威记录中的一条信息,对应的是下面的选中部分:

  前两个字节’c0 0c’就是之前出现baidu.com位置的指针,’00 02’表明返回的类型是NS,’00 01’表明是Internet协议,’00 03 a3 00’是TTL,’00 06’是后面跟着的内容的长度,告诉你后面的6个字节是返回给你的ns信息,你往后读6个字节第一条返回的权威记录就结束了,看看后面6个字节都是什么:’03 64 6e 73 c0 c0’这个的意思翻译过来就是:3dns+一个指针(指向的内容是baidu.com),所以我们就可以解析出baidu.com的一条ns记录是dns.baidu.com。后面的类似,就不多说了。

原理性的东西分析透彻了,下一节再来聊聊怎样用代码去实现。

时间: 2024-10-21 22:29:09

golang实现dns域名解析(三):响应报文分析的相关文章

常用http响应报文分析

这是我在使用Asp.Net的时候,整理的的一些关于Http响应报文的分析笔记,零零散散的记录, 现在贴出来,抛砖引玉,如果有什么不对或者不严谨的地方,请各位大神不吝赐教. 一.HTTP响应码响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行. 响应码分五种类型,由它们的第一位数字表示: 1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接受.理解和采纳 3xx:重定向,为了完成请求,必须进一步执行的动作 4xx:客户端错误,请求包含语法错误或者请求无法实现 5xx

浅谈浏览器解析 URL+DNS 域名解析+TCP 三次握手与四次挥手+浏览器渲染页面

(1)浏览器解析 URL 为了能让我们的知识层面看起来更有深度,我们应该考虑下面两个问题了: 从浏览器输入 URL 到渲染成功的过程中,究竟发生了什么? 浏览器渲染过程中,发生了什么,是不是也有重绘与回流? OK,兴致来了,我们就先从 浏览器解析 URL 看起,先来看看当用户输入 URL,到浏览器呈现给用户页面,经历了以下过程: 版本 A: 用户输入 URL 地址. 对 URL 地址进行 DNS 域名解析. 建立 TCP 连接(三次握手). 浏览器发起 HTTP 请求报文. 服务器返回 HTTP

HTTP响应报文与工作原理详解(转)

超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息. HTTP 请求报文 HTTP 请求报文由请求行.请求头部.空行 和 请求包体 4 个部分组成,如下图所示: 下面对请求报文格式进行简单的分析: 请求行:请求行由方法字段.URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开.常用的 HTTP 请求

DHCP协议报文分析

DHCP协议分析 一.DHCP简介 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)用来为网络设备动态地分配 IP地址等网络配置参数. DHCP 采用客户端/服务器通信模式,由客户端向服务器提出请求分配网络配置参数的申请,服务器返回为客户端分配的 IP 地址等配置信息,以实现 IP 地址等信息的动态配置. 二.DHCP工作过程 1.IP 地址动态获取过程 2.主要通过四个阶段进行: A.发现阶段,即 DHCP 客户端寻找 DHCP 服务器的阶段

应用层协议FTP、DNS协议、HTTP协议分析

分析所用软件下载:Wireshark-win32-1.10.2.exe 一.阅读导览 1.分析FTP协议 2.分析DNS协议 3. 分析HTTP协议 二.分析要求 (1)ftp部分: 学习 Serv-U FTP Server 服务软件的基本配置和FTP 客户端命令的使用 设计应用以获取ftp报文 分析ftp报文的格式与内容(分析至少5个报文,并理解它们之间的关系) 观察 FTP 协议的工作过程,分析FTP 客户是以 PORT 模式还是 PASV 模式连接服务器,观察两种连接 的建立过程和释放过程

HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结

HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行   请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET /data/info.html HTTP/1.1 方法字段就是HTTP使用的请求方法,比如常见的GET/POST 其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别: HTTP1.0对于每个连接都的建立一次连接一次只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Ho

查看DNS主机名解析的主机IP并向DNS服务器进行DNS域名解析

一.查看DNS主机名解析的主机IP host 命令 用途 把一个主机名解析到一个网际地址或把一个网际地址解析到一个主机名. 语法 host [-n [ -a ] [ -c Class] [ -d ] [ -r ] [ -t Type ] [ -v ] [ -w ] [ -z ]] Hostname | Address [ Server ] hostnew [ -a ] [ -c Class ] [ -d ] [ -r ] [ -t Type ] [ -v ] [ -w ] [ -z ] Host

HTTP请求报文与响应报文

一.HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 一个HTTP请求报文由请求行(request line).请求头部(header).空行和请求数据4个部分组成,下图给出了请求报文的一般格式. 网上复制了一个图片(转载自华山大师兄): 给一个更加清晰,明了的图片: 以下逐步分析各个数据部分的作用. 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔. 例如打开路径

响应报文的状态码

响应报文的状态码 状态码用来告诉HTTP客户端HTTP服务器是否产生了预期的response.状态码总共只有三位,第一位表示状态类别,总共分五种. (1) 1xx: 是进度通知类状态,意思就是说"请求我已经收到了,或你的请求我正在处理". (2) 2xx: 表示"你的请求我已经成功处理了". (3) 3xx: 即重定向,也就是服务器告诉客户端"你要的资源搬家了,你到某某地方再去找它吧". (4) 4xx: 客户端发来的响应报文里有些错误,比如语法