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

这篇具有很好参考价值的文章主要介绍了通过Wireshark捕捉访问网页的全过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

1)域名解析成IP地址

2)与目的主机进行TCP连接(三次握手)

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

4)与目的主机断开TCP连接(四次挥手)

1. 打开Wireshark并开始捕捉

2. 访问网页

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

  • 访问完成后,停止抓包

3. DNS解析域名过程

DNS域名解析时用的是UDP协议。整个域名解析的过程如下:

1)浏览器向本机DNS模块发出DNS请求,DNS模块生成相关的DNS报文;
2)DNS模块将生成的DNS报文传递给传输层的UDP协议单元;
3)UDP协议单元将该数据封装成UDP数据报,传递给网络层的IP协议单元;
4)IP协议单元将该数据封装成IP数据包,其目的IP地址为DNS服务器的IP地址;
5)封装好的IP数据包将传递给数据链路层的协议单元进行发送;
6)发送时在ARP缓存中查询相关数据,如果没有,就发送ARP广播(包含待查询的IP地址,收到广播的主机检查自己的IP,符合条件的主机将含有自己MAC地址的ARP包发送给ARP广播的主机)请求,等待ARP回应;
7)得到ARP回应后,将IP地址与路由的下一跳MAC地址对应的信息写入ARP缓存表;
8)写入缓存后,以路由下一跳的地址填充目的MAC地址,以数据帧形式转发;
9)转发可能进行多次;
10)DNS请求到达DNS服务器的数据链路层协议单元;
11)DNS服务器的数据链路层协议单元解析数据帧,将内部的IP数据包传递给网络层IP协议单元;
12)DNS服务器的IP协议单元解析IP数据包,将内部的UDP数据报传递给传输层UDP协议单元;
13)DNS服务器的UDP协议单元解析收到的UDP数据报,将内部的DNS报文传递给DNS服务单元;
14)DNS服务单元将域名解析成对应IP地址,产生DNS回应报文;
15)DNS回应报文->UDP->IP->MAC->我的主机;
16)我的主机收到数据帧,将数据帧->IP->UDP->浏览器;
17)将域名解析结果以域名和IP地址对应的形式写入DNS缓存表。

在显示过滤器中输入DNS,搜索www.4399.com相关的报文
通过Wireshark捕捉访问网页的全过程

IPv4 DNS请求报文:
通过Wireshark捕捉访问网页的全过程

分析:

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

第二个是Flags标志字段,2字节,每一位的含义不同,具体可以参考上面那个图,也可以看下面这个图:
通过Wireshark捕捉访问网页的全过程

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响应报文:

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

分析:

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

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

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

Time to Live(生存时间TTL):表示该资源记录的生命周期,从取出记录到抹掉记录缓存的时间,以秒为单位.

Data length(资源数据长度):以字节为单位,这里的4表示IP地址的长度为4字节.也就是下面Addr字段的长度.

Addr(资源数据): 返回的IP地址,就是我们想要的结果.

4. 三次握手

过滤一下IP地址

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

三次握手过程:

第一次握手:客户端发送SYN包至服务器,并进入SYN_SENT状态,等待服务器确认

第二次握手:服务器收到客户端的SYN包,发送一个ACK,同时发送自己的SYN,此时服务器进入SYN_RCVD状态

第三次握手:客户端接收到服务器发送的SYN+ACK后,进入ESTABLISHED状态,并发送服务器SYN包的确认ACK,服务器接收到客户端ACK后,进入ESTABLISHED状态

第一次握手:

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

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

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

客户端进入SYN_SENT状态。

第二次握手:

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

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

服务器进入SYN_RCVD状态

第三次握手:

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

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

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

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

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

过程:

1)浏览器向域名发出GET方法报文(HTTP请求);
2)该GET方法报文通过TCP->IP(DNS)->MAC(ARP)->网关->目的主机;
3)目的主机收到数据帧,通过IP->TCP->HTTP,HTTP协议单元会回应HTTP协议格式封装好的HTML形式数据(HTTP响应);[ 从请求信息中获得客户机想访问的主机名。从请求信息中获取客户机想要访问的web应用(web应用程序指提供浏览器访问的程序,简称web应用)。从请求信息中获取客户机要访问的web资源。(web资源,即各种文件,图片,视频,文本等)读取相应的主机下的web应用,web资源。用读取到的web资源数据,创建一个HTTP响应。
4)该HTML数据通过TCP->IP(DNS)->MAC(ARP)->网关->我的主机;
5)我的主机收到数据帧,通过IP->TCP->HTTP->浏览器,浏览器以网页形式显示HTML内容。

HTTP协议:

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

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

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

分析:

HTTP请求报文:

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

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

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

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

GET / HTTP/1.1

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

GET和POST的区别:

1)get是从服务器上获取数据,post是向服务器传送数据

2)生成方式不同

Get:URL输入;超连接;Form表单中method属性为get;Form表单中method为空。

Post只有一种:Form表单中method为Post。

3)数据传送方式:Get传递的请求数据按照key-value的方式放在URL后面,在网址中可以直接看到,使用?分割URL和传输数据,传输的参数之间以&相连,如:login.action?name=user&password=123。所以安全性差。

POST方法会把请求的参数放到请求头部和空格下面的请求数据字段就是请求正文(请求体)中以&分隔各个字段,请求行不包含参数,URL中不会额外附带参数。所以安全性高。

4)发送数据大小的限制:通常GET请求可以用于获取轻量级的数据,而POST请求的内容数据量比较庞大些。

Get:1~2KB。get方法提交数据的大小直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响。

Post:没有要求。post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的能力。

5)提交数据的安全:POST比GET方式的安全性要高。Get安全性差,Post安全性高。

通过GET提交数据,用户名和密码将明文出现在URL上,如果登录页面有浏览器缓存,或者其他人查看浏览器的历史记录,那么

就可以拿到用户的账号和密码了。安全性将会很差。

其中HTTP协议版本有两种:HTTP1.0/HTTP1.1。HTTP1.0/HTTP1.1的区别

HTTP1.0对于每个连接都只能传送一个请求和响应,请求完服务器返回响应就会关闭,HTTP1.0没有Host字段。

而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。

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

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个部分构成。

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

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

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开头组成。

1XX 请求正在处理

2XX 请求成功 200 OK 正常处理 204 no content 请求处理成功但没有资源可返回 206 Partial Content 对资源的某一部分请求

3XX 重定向 301 Moved Permanenly请求资源的URI已经更新(永久移动),客户端会同步更新URI。

302 Found 资源的URI已临时定位到其他位置,客户端不会更新URI。

303 See Other 资源的URI已更新,明确表示客户端要使用GET方法获取资源。

304 Not Modified 当客户端附带条件请求访问资源时资源已找到但未符合条件请求。

307 Temporary Redirect临时重定向

4XX 客户端错误 400 Bad Request 请求报文中存在语法错误,一般为参数异常。401 Unauthorized 发送的请求需要HTTP认证。

403 Forbiddden 不允许访问,对请求资源的访问被服务器拒绝 404 Not Found 无法找到请求的资源,请求资源不存在。

405 请求的方式不支持。

5XX 服务器错误 500 Internal Server Error 服务器的内部资源出故障,服务器在执行请求时发生了错误。

503 Service Unavailable 服务器暂时处于超负载状态或正在进行停机维护,无法处理请求,服务器正忙。

响应头部主要是返回一些服务器的基本信息,以及一些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使用四次挥手关闭一个连接:

第一次挥手:主动关闭方发送一个FIN并进入FIN_WAIT1状态

第二次挥手:被动关闭方接收到主动关闭方发送的FIN并发送ACK,此时被动关闭方进入CLOSE_WAIT状态;主动关闭方收到被动关闭方的ACK后,进入FIN_WAIT2状态

第三次挥手:被动关闭方发送一个FIN并进入LAST_ACK状态

第四次挥手:主动关闭方收到被动关闭方发送的FIN并发送ACK,此时主动关闭方进入TIME_WAIT状态,经过2MSL时间后关闭连接;被动关闭方收到主动关闭方的ACK后,关闭连接

参考资料:

参考资料1

参考资料2

参考资料3

参考资料4文章来源地址https://www.toymoban.com/news/detail-403181.html

到了这里,关于通过Wireshark捕捉访问网页的全过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTTPS】HTTPS过程详解,tcpdump抓包 全过程分析

    RFC中的HTTPS交互过程如下: 客户端支持的TLS最高版本号 客户端生成的随机数 客户端支持的加密套件 主机名server_name cipher suite怎么理解 名字为 ECDH-ECDSA-AES128-SHA256 的CipherSuite 使用 ECDH做密钥交换, 使用ECDSA做认证, 使用AES-128做加密算法, 使用SHA256做MAC算法。 客户端能支持的

    2024年02月11日
    浏览(39)
  • Tomcat处理请求的全过程

    在Tomcat处理客户端请求的过程中,这里面有三个组件概念,他们都是线程,分别负责不同的职责。 (必须记清楚这三个线程组件) Acceptor 一个普通线程任务,用于接收新连接,并将新连接封装,选择一个 Poller 将新连接添加到 Poller 的事件队列中。 Poller 一个线程任务,用于

    2024年01月20日
    浏览(40)
  • linux安装docker全过程

    3. 第二步:设置docker的存储库。就两条命令,我们直接执行就好。 ​ ​ 4. 安装docker engine和docker-compose。 执行命令: ​ 等到屏幕输出success后,我们输入docker -v 。如果输出了它的版本号那么就证明docker安装好了。输入 docker compose version 如果也输出了版本号,则证明 docker-co

    2024年02月10日
    浏览(48)
  • Windows安装DVWA(全过程)

    安装DVWA环境目的是搭建漏洞靶场环境,安全进行攻防演示 1、PHPStudy软件安装 2、DVWA下载与安装 1、PHPStudy软件安装 【1】访问此网站PHPStudy下载软件(下载最新版的就可以) 【2】在下载好的压缩包中运行.exe文件 【3】设定安装路径(自己设定安装路径,最好不要放在C盘)安装

    2024年01月16日
    浏览(47)
  • Java对象创建回收全过程

    目录 1 前言 2 Java对象创建 2.1  类加载检查 2.1.1 谁来加载 2.1.2 如何加载 2.2 分配内存 2.3 初始化零值 2.4 设置对象头 2.5 执行clinit 3 对象回收 4 补充Tomcat打破双亲委派机制 在讲java创建之前,我们先来了解下 Java虚拟机内存 组成,当Java虚拟机启动后,会将系统分配给JVM的空间逻

    2024年02月14日
    浏览(51)
  • 永恒之蓝全过程复现

    一,永恒之蓝简介 永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒, 英国

    2024年02月12日
    浏览(44)
  • windows上配置IIS全过程

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/129085877 windows server 2012上配置IIS全过程 选择 基于角色或基于功能的安装 选择 从服务器池中选择服务器 在勾选【Web服务器(IIS)】选项时候,可能会弹出如下类似的需要添加其它角色和功能的确认框,点击【添加

    2024年01月17日
    浏览(53)
  • 制作Python游戏全过程(汇总2)

    目录 前言: 1.基于pygame库创建游戏模块: 1.1引入模块 1.1.1 这是对代码的解释:

    2024年04月14日
    浏览(56)
  • 探索 Spring Boot 项目全过程

    在 Java 这个圈子,一提到框架就不得不提到 Spring Boot;那 Spring Boot 到底是何许物也呢?Spring Boot 就是简化 Spring 程序开发的框架。怎样理解 Spring Boot 和Spring 之间的关系呢?一句话总结: “Spring 的诞⽣是为了简化 Java 程序的开发的,而 Spring Boot 的诞⽣是为了简化 Spring 程序开

    2024年02月11日
    浏览(56)
  • Microsoft Office安装全过程记录

    相信过新年时大家都会收到许多压岁钱吧(也可能是输出了许多压岁钱),过了一个新年,我收到了2000多块压岁钱。因此,我想完成一个一直没有完成的梦想,那就是把电脑上的WPS换成信息课老师示范的Microsoft Office(我放弃WPS的两个原因:1. 没Office用着习惯;2. 它慢慢的也

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包