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响应消息(Request Mesage)。 HTTP 响应消息也由三部分组成,分别是状态行、消息报头、响应正文。
状态码由三位数宇组成,第 一位数字定义了响应的类别,有以下5种可能取值。
1xx:指示信息,表示请求已接收,继续处理。
2xx:成功,表示请求已被成功接收、理解、接受。
3xx:重定向,要完成请求必须进行更进一步的操作。
4xx:客户端错误,请求有语法错误或请求无法实现。
5xx:服务器端错误,服务器未能实现合法的请求。
(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 方法。
可能原因:不是无法抓取 http包,是抓到了没有解密,显示还是TLS。
解决方法:
Windows系统参考:为什么我的 Wireshark 抓不到/抓不全 HTTP 数据包 ?
MAC系统参考:Mac电脑安装配置Wireshark 抓包工具,解决Https无法抓包问题
我们以为捕获不到http报文,实际上是因为网站加密了,通过上述方法得到http报文中可能有许多看不懂的地方,而且发现使用的端口号是443而不是80,这是因为大部分网站都是使用HTTPS协议进行传输,以提高数据传输的安全性。
但是我们无法通过Wireshark进行捕捉数据包,因此,我们可以尝试一些使用HTTP的网站。
尽管如此,仍然有一些HTTP开头的网站存在。这些网站可能是因为运营成本较低、没有很多个人信息输入需求,或者本身不涉及敏感信息等原因。比如旅游网站“马蜂窝”(http://www.mafengwo.cn/)。
通过Wireshark中的过滤器,筛选出该IP的数据:
此时就能清晰的看到http请求报文,以及http响应报文。
进行对应分析即可:
可以参考:
DNS(Domain Name System,域名系统)用于命名组织到域层次结构中的计算机和网络服务。
DNS 协议分成包头和数据两部分。如图所示,该报文由12B的首部和4个长度可变的字段组成:
各字段含义:
标志字段各字段解释如下:
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 即可。
(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)、类别类型和值。
nslookup 是一个监测网络中DNS服务器是否能正确实现域名解析的命令行工具。适用于Linux/UNIX和Windows 平台,用于简单检测DNS服务器的工作是否正常,也是排除 DNS服务器故障的一项重要手段。nslookup 指令适用于正向域名解析和反向域名解析。本实验通过nslookup 检测服务器的配置,并利用协议分析软件Wireshark捕获分析nslookup命令产生的DNS数据包。
nslookup查询命令格式为 nslookup 域名
,主要产生两个操作,一是根据本地DNS服务器的IP地址获得本地 DNS服务器的名字; 二是根据输人查询的域名查找该域名的 IP地址。
在一台连接 Internet 的计算机上进行下列实验。
nslookup www.baidu.com
,分析执行结果。(1) DNS 协议中的资源记录 RR(Record Resource)包含哪些内容?
(2) DNS 除了返回需查找的域名还可能返回哪些内容?
(3) 反复实验,判断一个域名是否可以对应多个 IP 地址?域名与 IP 地址之间是否有对应的关系?
(4) 若实验中无法进行 DNS 解析,请写出导致问题的原因及解决办法
(5) DNS 协议何时用 UDP?何时用 TCP?
可以参考:nslookup 入门命令详解
首先在过滤器中输入dns
,然后查看后面的info信息,看看哪些是自己发送的DNS请求,最后对应信息进行分析。