0
点赞
收藏
分享

微信扫一扫

通过Wireshark捕捉访问网页的全过程

是她丫 2022-02-15 阅读 42

通过Wireshark捕捉访问网页的全过程

整个过程可以概括为以下几个部分:

1. 打开Wireshark并开始捕捉

2. 访问网页

  • 打开一个无痕浏览器,并访问网站www.4399.com

  • 访问完成后,停止抓包

3. DNS解析域名过程

在显示过滤器中输入DNS,搜索www.4399.com相关的报文
在这里插入图片描述

IPv4 DNS请求报文:
在这里插入图片描述

分析:

第一个是Transaction ID为标识字段,2字节,用于辨别DNS应答报文是哪个请求报文的响应.

第二个是Flags标志字段,2字节,每一位的含义不同,具体可以参考上面那个图,也可以看下面这个图:
在这里插入图片描述

QR: 查询/响应,1为响应,0为查询

Opcode: 查询或响应类型,这里0表示标准,1表示反向,2表示服务器状态请求

AA: 授权回答,在响应报文中有效,待会儿再看

TC: 截断,1表示超过512字节并已被截断,0表示没有发生截断

RD: 是否希望得到递归回答

RA: 响应报文中为1表示得到递归响应

zero: 全0保留字段

rcode: 返回码,在响应报文中,各取值的含义:

0 - 无差错

1 - 格式错误

2 - 域名服务器出现错误

3 - 域参照问题

4 - 查询类型不支持

5 - 被禁止

6 ~ 15 保留

紧接着标志位的是

Quetions(问题数),2字节,通常为1

Answer RRs(资源记录数),Authority RRs(授权资源记录数),Additional RRs(额外资源记录数)通常为0

字段Queries为查询或者响应的正文部分,分为Name Type Class

Name(查询名称):这里是ping后的参数,不定长度以0结束

Type(查询类型):2字节,这里是主机A记录.其各个取值的含义如下:

值 助记符 说明

1 A IPv4地址。

2 NS 名字服务器。

5 CNAME 规范名称。定义主机的正式名字的别名。

6 SOA 开始授权。标记一个区的开始。

11 WKS 熟知服务。定义主机提供的网络服务。

12 PTR 指针。把IP地址转化为域名。

13 HINFO 主机信息。给出主机使用的硬件和操作系统的表述。

15 MX 邮件交换。把邮件改变路由送到邮件服务器。

28 AAAA IPv6地址。

252 AXFR 传送整个区的请求。

255 ANY 对所有记录的请求。

Class(类):2字节,IN表示Internet数据,通常为1

IPv4 DNS响应报文:

在这里插入图片描述

分析:

可以看到和第一个请求包相比,响应包多出了一个Answers字段,同时Flags字段每一位都有定义.

关注一下Flags中Answer RRs 为4 说明对应的Answers字段中将会出现2项解析结果.

Answers字段可以看成一个List,集合中每项为一个资源记录,除了上面提到过的Name,Type,Class之外,还有Time to Live,Data length,Addr.

4. 三次握手

过滤一下IP地址

在这里插入图片描述

三次握手过程:

第一次握手:

在这里插入图片描述

浅蓝色那里的Sequence number,只是相对序列号。

客户端作为源主机通过向服务器(作为目的主机)发送TCP连接请求(SYN段),其中flags处,SYN=1,ACK=0;

客户端进入SYN_SENT状态。

第二次握手:

在这里插入图片描述

服务器在指定的端口等待连接,收到TCP连接请求后,将回应一个TCP连接应答(即SYN/ACK段),其中Flags显示是SYN=1,ACK=1;序列号不变,但确认号为客户端的初始序列号加一。

服务器进入SYN_RCVD状态

第三次握手:

在这里插入图片描述

客户端再向服务器发送一个TCP连接确认报文,其中Flags处SYN=0,ACK=1;序列号为客户端初始序列号加一,确认好为服务器的初始序列号加一。

此时客户端和服务器都进入ESTABLISHED状态。

经过上述的三次握手,TCP连接正式建立,双方都置为ACK flag,交换并确认了对方的初始序列号。

5. 发送与收取数据(浏览器与目的主机开始HTTP访问过程)

过程:

HTTP协议:

在这里插入图片描述

请求报文和响应报文结构:

在这里插入图片描述

分析:

HTTP请求报文:

一个HTTP请求报文由请求行(request line)、请求头部(request header)、空行和请求数据4个部分构成。

在这里插入图片描述

请求行数据格式由三个部分组成:请求方法、URI、HTTP协议版本,他们之间用空格分隔。

该部分位于数据首行,基本格式为:

GET / HTTP/1.1

该部分的请求方法字段给出了请求类型,URI给出请求的资源位置(/)。HTTP中的请求类型包括:GET、POST、HEAD、PUT、DELETE。一般常用的为GET和POST方式。最后HTTP协议版本给出HTTP的版本号。

请求头部紧跟着请求行,该部分主要是用于描述请求正文,其基本格式如下:

Host: www.4399.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

主要是用于说明请求源、连接类型、以及一些Cookie信息等。

请求正文和请求头部通过一个空行进行隔开,一般用于存放POST请求类型的请求正文。

HTTP响应报文:

HTTP响应报文由状态行(HTTP版本、状态码(数字和原因短语))、响应头部、空行和响应体4个部分构成。

在这里插入图片描述

其中响应头部和响应体同样也是通过一个空行进行隔开,如下为一个简单的示例:

HTTP/1.1 200 OK
Date: Tue, 25 Jan 2022 08:38:24 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Tue, 25 Jan 2022 05:50:30 GMT
Server: nginx
Last-Modified: Tue, 25 Jan 2022 01:14:26 GMT
ETag: W/"61ef4ef2-26b31"
Cache-Control: max-age=1800
Content-Encoding: gzip
Age: 11874
X-Via: 1.1 PS-KHN-01xD135:4 (Cdn Cache Server V2.0), 1.1 wtong33:1 (Cdn Cache Server V2.0), 1.1 PS-JJN-01nQa28:12 (Cdn Cache Server V2.0)
X-Ws-Request-Id: 61efb700_PS-JJN-010EZ27_38388-36841

388
............ys[../.........-U,a...b*....K'.n.o...bA$DR"	..-.I.w.%;.FR.D...y.G.-[..x.-..%K.......g...`.{.......{.................UM................B.#..P..._....^.._VE...^.........LK(.._UWU7.
...B.N.:|*v8...z._B.i...X.<TP~y...P].....{......Q.q".t....9.i...f..`-.............
.........U.....B.t!DO8RU....g.G..Ec.huU.}.L}S.....kQ.j.......v..Bs.%[.~fsum..x,../....._
....

或者有一些浏览器响应头部在Header中显示,响应体在Reponse中显示。

状态行主要给出响应HTTP协议的版本号、响应返回状态码、响应描述,同样是单行显示。格式为:

HTTP/1.1 200 OK

状态码告知从服务器端返回的请求的状态,一般由一个三位数组成,分别以整数1~5开头组成。

响应头部主要是返回一些服务器的基本信息,以及一些Cookie值等。如上的响应头为:

Date: Tue, 25 Jan 2022 08:38:24 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Tue, 25 Jan 2022 05:50:30 GMT
Server: nginx
Last-Modified: Tue, 25 Jan 2022 01:14:26 GMT
ETag: W/"61ef4ef2-26b31"
Cache-Control: max-age=1800
Content-Encoding: gzip
Age: 11874
X-Via: 1.1 PS-KHN-01xD135:4 (Cdn Cache Server V2.0), 1.1 wtong33:1 (Cdn Cache Server V2.0), 1.1 PS-JJN-01nQa28:12 (Cdn Cache Server V2.0)
X-Ws-Request-Id: 61efb700_PS-JJN-010EZ27_38388-36841

响应体为请求需要得到的具体数据,可以为任何类型数据,一般网页浏览返回的为html文件内容,如上面的响应体为:

388
............ys[../.........-U,a...b*....K'.n.o...bA$DR"	..-.I.w.%;.FR.D...y.G.-[..x.-..%K.......g...`.{.......{.................UM................B.#..P..._....^.._VE...^.........LK(.._UWU7.
...B.N.:|*v8...z._B.i...X.<TP~y...P].....{......Q.q".t....9.i...f..`-.............
.........U.....B.t!DO8RU....g.G..Ec.huU.}.L}S.....kQ.j.......v..Bs.%[.~fsum..x,../....._
....

6. 四次挥手

TCP使用四次挥手关闭一个连接:

参考资料:

参考资料1

参考资料2

参考资料3

参考资料4

举报

相关推荐

0 条评论