计算机网络实验4:HTTP、DNS协议分析

1. 主要教学内容

  • 实验内容:使用Wireshark捕获数据包,根据捕获的相关数据包分别对HTTP、DNS协议展开分析。额外内容:利用fiddler软件对HTTPS协议进行分析。
  • 所需学时:1。
  • 重难点:HTTP和DNS协议的报文结构。
  • 周次:第3周。
  • 教材相关章节:2.4、2.7。

2. HTTP协议

HTTP(超文本传输协议)是一个基于请求与响应模式的无状态(指协议对于事务处理没有记忆能力)的应用层协议,常基于 TCP 的连接方式。HTTP 1.1版本中给出一种持续连接的机制,绝大多数的 Web 应用都构建在 HTTP 协议之上。
在 HTTP 的请求和应答标准中,客户端是终端用户,服务器端是网站。通过使用 Web浏览器或者其他的工具,客户端发起一个到服务器上指定端口(默认端口为 80)的 HTTP请求,这个客户端称为用户代理(User Agent)。应答的服务器上存储着一些资源,比如HTML 文件和图像,这个应答服务器称为源服务器(Origin Server)。在用户代理和源服务器中间可能存在多个中间层,比如代理、网关或者隧道(Tunnels)。尽管 TCP/IP 协议是互联网上最流行的应用,但是 HTTP 协议并没有规定必须使用它和它支持的层。事实上HTTP 可以在任何其他互联网协议或其他网络上实现。HTTP 只假定其下层协议提供可靠的传输,任何能够提供这种保证的协议都可以被其使用。
通常情况下,由 HTTP 客户端发起一个请求,建立一个到服务器指定端口的 TCP 连接。HTTP 服务器则在该端口监听客户端发送过来的请求。一旦收到请求,服务器向客户端发回一个状态行和响应的消息,消息的消息体可能是请求的文件、错误消息或者其他一些信息。

  • HTTP有两类报文,HTTP的请求报文响应报文结构(SP:空格;crlf :回车换行):

在这里插入图片描述

  • HTTP 协议定义了8种方法表示对指定数据的操作:

在这里插入图片描述

在这里插入图片描述

  • HTTP请求报文分为三部分:请求行、消息报头、请求正文。

  • 在接收和解释请求消息后,服务器返回一个HTTP响应消息(Request Mesage)。 HTTP 响应消息也由三部分组成,分别是状态行、消息报头、响应正文。

  • 状态码由三位数宇组成,第 一位数字定义了响应的类别,有以下5种可能取值。

1xx:指示信息,表示请求已接收,继续处理。

2xx:成功,表示请求已被成功接收、理解、接受。

3xx:重定向,要完成请求必须进行更进一步的操作。

4xx:客户端错误,请求有语法错误或请求无法实现。

5xx:服务器端错误,服务器未能实现合法的请求。

  • 常见状态码:

在这里插入图片描述

在这里插入图片描述

3. HTTP分析实验

【实验目的】

(1) 掌握 HTTP 协议获取网页的流程。
(2) 了解 HTTP 请求报文和响应报文的格式,并进行报文分析。
(3) 了解 HTTP 1.0 和 HTTP 1.1的区别。

【实验原理】

HTTP 协议定义了 Web 客户端(浏览器)如何向 Web 站点请求 Web 页面以及 Web 服务器如何将 Web 页面传送给客户机。具体而言,这是通过客户端发送 HTTP 请求报文和HTTP 响应报文实现的。当用户请求一个页面时(在浏览器中输人网址或者单击网页某一个链接),浏览器会向 Web 服务器发出对该页及其引用的相关对象的 HTTP 请求报文,服务器响应这些请求报文,生成 HTTP 响应报文,并将请求的对象附在 HTTP 响应报文后发送给客户端。

由于网页文档的传输需要可靠性的保证,所以 HTTP 协议使用传输层的 TCP 协议作为载体。TCP 协议是一个面向连接的协议,提供可靠的数据传输,HTTP 协议在默认的情况下使用TCP的80端口。

HTTP 协议是无状态的协议,即当服务器收到某个客户端发送的 HTTP 请求报文时, 并不清楚该客户端是否曾经发送过相同的 HTTP 请求报文,即 HTTP 协议本身不会维护客户端和服务器端的状态。

非持久连接方式与网页上的每个对象都需要建立一个TCP 连接,效率不高,HTTP 1. 0 只能使用非持久连接方式。持久连接方式使用一个TCP 连接,其流水线作业方式比非流水线作业方式效率高。HTTP 1. 1既能使用非持久连接方式又能使用持久连接方式,默认方式下使用持久连接的流水线作业方式。持久连接的缺点是对服务器的性能要求比较高。因为服务器对于每个TCP 的连接都需要花费较长的时间,而每个TCP 连接都需要占用服务器响应的资源, 非持久连接由于连接释放得快,资源的释放也相对快,并且连接客户的数量对于持久连接而言相对要少一些。

HTTP报文包括HTTP请求报文和HTTP响应报文。这两种报文在实际的传输中都是以 ASCII 码方式编码的。HTTP 报文格式反映了HTTP 协议的核心内容,包括客户端如何向服务器端请求对象,通信双方需要协商哪些内容等。

【实验内容】

  • 步骤 1:打开 Wireshark,选择监听网卡,设置过滤规则(只捕获 HTTP 的报文),开始侦听。

  • 步骤 2:打开浏览器,输人网址(例如 www.baidu.com),捕获数据

  • 步骤 3:分析捕获的数据包,回答以下问题。

(1) 在捕获的报文中,共有几种 HTTP 报文?客户机与服务器之间共建立了几个连接?服务器和客户机分别使用了哪几个端口?

(2) 在捕获的 HTTP 报文中,选择一个 HTTP 请求报文和对应的 HTTP 应答报文,按图 2-8 所示分析它们的字段,并将分析结果填人表 2-4 和表 2-5 中。

在这里插入图片描述

(3) 综合分析捕获的报文,理解HTTP协议的工作过程,将结果填人表2-6中。

在这里插入图片描述

(4) 在第1个和第3个HTTP会话中,Web服务器对 Web客户端GET请求的响应是什么?

【实验思考】

(1) 实验中哪台计算机启动了 HTTP 会话?是如何启动的?

(2) 哪台计算机首先发出了结束 HTTP 会话的信号? 是如何发出的?

(3) GET 方法取回由 Request-URI标识的信息,POST 方法可以用于提交表单。请寻找一个有表单提交特征的网页,访问该网页,捕获数据包并分析请求方法中的 GET 和POST 方法。

4. HTTP分析实验可能遇到的问题

4.1 捕捉不到http报文

可能原因:不是无法抓取 http包,是抓到了没有解密,显示还是TLS。

解决方法

Windows系统参考:为什么我的 Wireshark 抓不到/抓不全 HTTP 数据包 ?

MAC系统参考:Mac电脑安装配置Wireshark 抓包工具,解决Https无法抓包问题

4.2 百度是使用HTTPS协议进行传输

我们以为捕获不到http报文,实际上是因为网站加密了,通过上述方法得到http报文中可能有许多看不懂的地方,而且发现使用的端口号是443而不是80,这是因为大部分网站都是使用HTTPS协议进行传输,以提高数据传输的安全性。

但是我们无法通过Wireshark进行捕捉数据包,因此,我们可以尝试一些使用HTTP的网站。

尽管如此,仍然有一些HTTP开头的网站存在。这些网站可能是因为运营成本较低、没有很多个人信息输入需求,或者本身不涉及敏感信息等原因。比如旅游网站“马蜂窝”(http://www.mafengwo.cn/)。

4.3 Wireshark获得数据太多如何筛选

  • 我们可以通过网站的前端页面获得网站的IP地址:

在这里插入图片描述

通过Wireshark中的过滤器,筛选出该IP的数据:

在这里插入图片描述

此时就能清晰的看到http请求报文,以及http响应报文。

进行对应分析即可:

在这里插入图片描述

在这里插入图片描述

4.4 http报文字段含义不清楚

General(通用部分):

  • Request URL:请求的URL地址,即请求的目标资源。
  • Request Method:请求方法,表示客户端对资源的请求操作。常见的方法有GET、POST、PUT、DELETE等。
  • Status Code:状态码,表示服务器对请求的处理结果。常见的状态码有200 OK(成功)、404 Not Found(未找到资源)、500 Internal Server Error(服务器内部错误)等。
  • Remote Address:这个字段不是HTTP标准中的一部分,而是指示客户端的IP地址和端口号,表示请求的源IP地址。在HTTP请求中,这个字段显示客户端的IP地址和端口号,通常是代理服务器或负载均衡器的地址,而不是最终用户的真实IP地址。
  • Referrer Policy:Referrer是HTTP请求头部的一个字段,用于指示请求的来源URL,即访问当前页面的前一个页面的URL。Referrer Policy则是为了控制Referrer头部的发送情况而定义的策略。Referrer Policy可以设置为no-referrer(不发送Referrer头部)、no-referrer-when-downgrade(只在从HTTPS网页导航到HTTP网页时不发送Referrer头部)、origin(仅发送源信息,但不包含路径等具体内容)、strict-origin(仅在协议安全的情况下发送完整的源信息)等。

Request Headers(请求头部):

  • User-Agent:用户代理,标识发起请求的客户端应用程序或设备类型,例如浏览器名称和版本。
  • Accept:客户端可接受的响应内容类型,通常是MIME类型(例如text/html、application/json等)。
  • Accept-Language:客户端可接受的语言类型,用于指定客户端希望接收的语言版本。
  • Cookie:包含客户端发送给服务器的HTTP cookie信息,通常用于会话管理。
  • Referer:表示请求的来源URL,即访问当前页面的前一个页面的URL,跨域时基于安全不会给全
  • Authorization:用于在请求中传递认证信息,例如JWT或者原始的用于HTTP基本认证的用户名和密码。
  • Cache-Control:缓存控制指令,用于指定缓存策略,例如no-cache(不使用缓存)或max-age(缓存的最大有效时间)等。
  • Host:表示请求的目标主机的域名或IP地址。在HTTP/1.1中,Host头部是必需的,用于指定请求的目标服务器和端口号。例如:www.example.com:8080
  • Origin:Origin头部用于指示请求的来源,即发起请求的网页所在的源,包含协议、域名和端口号。它通常用于跨域请求中,由浏览器自动添加。例如:http://www.origin.com
  • Connection:Connection头部用于控制是否在请求完成后保持与服务器的连接。它是一个非标准的HTTP头部,在HTTP/1.1中引入了持久连接(Persistent Connection)后,取代了早期版本的Proxy-Connection和Keep-Alive头部。Connection头部的取值通常有几种:
  • close:请求完成后关闭与服务器的连接。即,每次请求都会新建一个连接。
  • keep-alive:请求完成后保持与服务器的连接,以便在同一连接上进行多个请求。这是持久连接的一种方式,减少了连接的建立和关闭的开销,提高了请求的效率。
  • Upgrade:允许客户端和服务器协商更高级的协议。例如,WebSocket可以通过此头部实现从HTTP协议升级到WebSocket协议。
  • 在现代的HTTP/1.1中,持久连接是默认启用的,即默认使用keep-alive,除非显示指定close,因此通常情况下可以不必手动添加Connection头部。

Response Headers(响应头部):

  • Content-Type:响应的内容类型,表示服务器返回的数据的MIME类型,例如text/html、application/json等。
  • Content-Length:响应的内容长度,表示服务器返回数据的字节数。
  • Set-Cookie:设置HTTP cookie,服务器通过该头部向客户端发送新的cookie信息,用于会话管理。
  • Expires:指定响应内容的过期时间,即缓存失效时间点。
  • Cache-Control:缓存控制指令,用于指定缓存策略,例如no-cache(不缓存)或max-age(缓存的最大有效时间)等。
  • Server:指示服务器软件的名称和版本。

4.5 http协议工作过程怎么填写

可以参考:

在这里插入图片描述

5. DNS协议

DNS(Domain Name System,域名系统)用于命名组织到域层次结构中的计算机和网络服务。
DNS 协议分成包头数据两部分。如图所示,该报文由12B的首部和4个长度可变的字段组成:

在这里插入图片描述

各字段含义:

  • 标识字段:由客户程序设置并有服务器返回结果,16 位,在对应的query和response报文中有着相同的ID,可以在捕获到的包中配对请求和应答报文,提取相关信息,同时也可以根据它们的时间戳大致估计DNS的响应时间。
  • 标志字段:16 位,结构如图所示:

在这里插入图片描述

标志字段各字段解释如下:

QR(查询/响应):占 1B,定义报文类型。若为0则表示是查询报文,否则就是响应报文。

OpCode:占4B,定义查询或响应的类型。若为0则表示是标准的,若为 1则表示是反向的,若为2则表示是服务器状态请求。

AA(授权回答):占1B,当它置位时(即值为 1),表示名字服务器是权限服务器,它只用在响应报文中。

TC(截断的):占 1B,当它置位时,表示响应已超过512B并已截断。

RD(要求递归):占 1B,当它置位时,表示客户希望得到递归回答。它在查询报文中置位,在响应报文中重复置位。

RA(递归可用):占 1B,当它在响应报文中置位时,表示可得到递归响应,它只能在响应报文中置位。

保留:占 1B,置为 0。

未知1与未知2均为新增字段,各占 1B。

RCode:占4B,表示在响应中的差错状态,只有权限服务器才能做出这个判断。

  • 问题数字段

在这里插入图片描述

查询名:要查找的名字,它由一个或者多个标示符序列组成。每个标示符以首字节数的计数值说明该标示符长度,每个名字以 0 结束。计数字节数必须在 0~63 之间。该字段无须填充字节。

查询类型:每个问题有一个查询类型,通常查询类型为 A(由名字获得 IP 地址)或者PTR(获得 IP 地址对应的域名)。

类域(class):置为0x0001 即可。

  • 资源记录部分:是DNS协议的最后了个字段,回答字段、授权宇段和附加信息字段均采用资源记录RR(Resource Record)的相同格式。

在这里插入图片描述

6. DNS协议分析实验

【实验目的】

(1) 学会在客户端使用 nslookup 命令进行域名解析

(2) 通过协议分析软件掌握 DNS 协议的报文格式

【实验原理】

DNS(Domain Name System,域名系统)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址。在因特网中向主机提供域名解析服务的机器即为 DNS 服务器。

DNS 基于 IP 协议中的 UDP 协议,端口号为 53。目前 DNS 分布式查询方式一般采用递归递归迭代相结合的方法。当在浏览器的地址栏中输人某一网址时,浏览器首先会向默认的本地域名服务器发出 DNS 请求报文,DNS请求报文中包括请求的域名和请求的类别。若本地域名服务器能够找到对应的 IP 地址,便返回一个 DNS 相应报文,其中包括域名以及一个或多个对应的IP 地址。若本地域名服务器不能找到,则会向上级根域名服务器发出域名解析请求,根域名服务器会返回一个 IP 地址告诉本地域名服务器应该到哪里请求所需域名的解析,本地域名服务器根据得到的 IP 向对应的域名服务器发出请求,最终获得域名和对应的 IP。
DNS的正向解析用于通过域名解析 IP 地址,反向解析用于通过 IP 地址获得域名。DNS 采用一个称为资源记录的数据结构描述某个域名和对应IP。每个资源记录是一个五元组,包括域名(Domain name)、生存时间(TTL)、类别类型

  • 生存时间用于指示该记录的稳定程度,极为稳定的信息会被分配一个很大的值,而极不稳定的信息则会被分配一个较小的值。
  • 类别字段对于 Internet 而言总是IN,事实上用于其他非 Internet 的情况几乎没有。类型字段指出了记录的类型,主要的类型包括 A,表示一台主机的IP 地址;MX,邮件服务器;NS,名字服务器;Cname,别名等。

nslookup 是一个监测网络中DNS服务器是否能正确实现域名解析的命令行工具。适用于Linux/UNIX和Windows 平台,用于简单检测DNS服务器的工作是否正常,也是排除 DNS服务器故障的一项重要手段。nslookup 指令适用于正向域名解析和反向域名解析。本实验通过nslookup 检测服务器的配置,并利用协议分析软件Wireshark捕获分析nslookup命令产生的DNS数据包。

nslookup查询命令格式为 nslookup 域名,主要产生两个操作,一是根据本地DNS服务器的IP地址获得本地 DNS服务器的名字; 二是根据输人查询的域名查找该域名的 IP地址。

【实验内容】

在一台连接 Internet 的计算机上进行下列实验。

  • 步骤 1:启动 Wireshark,选定侦听网卡,开始抓包。
  • 步骤 2:切换到命令提示窗口,在命令提示符下输人 nslookup www.baidu.com,分析执行结果。
  • 步骤 3:分析 Wireshark 捕获的数据,观察 nslookup 的通信过程,正常情况下能够捕获到 4 帧,试具体分析捕获的数据包中 DNS 的报文格式细节。
  • 步骤 4:继续使用协议分析仪进行数据的捕获,再次访问 www.baidu.com,观察此时是否还有 DNS 请求?
  • 步骤 5:关闭浏览器后再重新打开,访问一个尚未访问过的网站,例如 www.sohu.com,观察此时是否有 DNS 请求?为什么?
  • 步骤 6:在Windows 系统的命令提示符下运行 ipconfig /displaydns,显示本机缓冲区中的 DNS 解析内容。
  • 步骤 7:在 Windows 系统的命令提示符下运行 ipconfig /flushdns,则可以清除本机的 DNS 缓存记录。
  • 步骤 8:关闭浏览器再打开,访问刚才打开过的网站,观察是否有 DNS 请求?为什么?

【实验思考】

(1) DNS 协议中的资源记录 RR(Record Resource)包含哪些内容?

(2) DNS 除了返回需查找的域名还可能返回哪些内容?

(3) 反复实验,判断一个域名是否可以对应多个 IP 地址?域名与 IP 地址之间是否有对应的关系?

(4) 若实验中无法进行 DNS 解析,请写出导致问题的原因及解决办法

(5) DNS 协议何时用 UDP?何时用 TCP?

7. DNS协议分析实验可能遇到的问题

7.1 不了解nslookup命令如何使用

可以参考:nslookup 入门命令详解

7.2 如何在Wireshark中对应DNS协议内容

首先在过滤器中输入dns,然后查看后面的info信息,看看哪些是自己发送的DNS请求,最后对应信息进行分析。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值