准备:联网计算机、wireshark

开始:

1.打开wireshark选择网卡,进行监听。打开浏览器,访问某度,获得数据,并使用过滤器过滤出这个过程的数据包。

首先查看DNS数据包,从内容中获取某度IP地址。

wireshark捕获域名解析报文 wireshark抓取http报文_wireshark怎么抓路由器的包

wireshark捕获域名解析报文 wireshark抓取http报文_wireshark抓不到包_02

以上为DNS应答包。wireshark上的数据包是分层的,以该DNS应答包为例,Frame是物理层的帧头部,Ethernet II是以太网帧的头部信息,Internet Protocol Version4是IP层的IPV4数据包头信息,User Datagram Protocol是UDP报文头部,Domain Name System(response)是DNS应答。此处DNS服务使用UDP协议。从Answers中可见回复了两个IP地址,14.215.177.38和39。Queries中存放询问的内容。此处主要分析与14.215.177.39之间的通信。

2.选择过滤器,ip.addr==14.215.177.39。

wireshark捕获域名解析报文 wireshark抓取http报文_wireshark https_03

可以看到已经三次握手开始TCP连接了。可以看到最后四个数据包显示已经三次握手完成,开始建立TLS连接了。但在这之前还有一次三次握手过程,这个过程中,本机还发送了http的get包,并且接到了状态码为302的包。选择这两个包,可以发现get包中的request URI是http://www.baidu.com,而返回的302状态码的包中将网址重定向到了https://www.baidu.com。

wireshark捕获域名解析报文 wireshark抓取http报文_wireshark https_04

wireshark捕获域名解析报文 wireshark抓取http报文_wireshark捕获域名解析报文_05

过程分析:

在浏览器中输入www.baidu.com,敲击回车的过程中,首先浏览器向DNS服务器请求解析www.baidu.com的IP地址。域名系统DNS解析出某度服务器的IP地址为14.215.177.38和14.215.177.39。然后浏览器与对应服务器建立TCP连接,连接建立后,浏览器向URI:http://www.baidu.com发出取文件命令:GET / HTTP/1.1。(虽然百度使用的是https协议,但直接在地址栏输入网址后, 默认仍以 http 协议访问。)此时服务器给的响应是302重定向,将请求重定向到使用https协议的https://www.baidu.com。浏览器再次与服务器建立TCP连接,连接建立后,开始建立TLS连接,加密所有发送的数据。

接下来是对明文的GET和302进行瞎几把分析。

GET:

右键单击数据包,选择追踪HTTP流。

GET / HTTP/1.1              //请求头使用GET方法,HTTP协议版本为1.1Host: www.baidu.com          //服务器主机名Connection: keep-alive            //连接方式:keep-alive,即建立连接后保持连接活跃Upgrade-Insecure-Requests:1       //升级不安全请求请求头,向服务器发送信号,表示客户端对加密和经过身份验证的响应的偏好,并且它可以成功处理升级不安全请求的 CSP 指令。这个请求头方便了将http升级https,避免了在https页面请求http资源产生的错误。User-Agent: Mozilla/5.0(Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/78.0.3904.108 Safari/537.36//UA,给出浏览器品牌、版本以及操作系统等信息。该条请求头为chrome浏览器,版本78.0.3904.108,系统win10,但其实使用的是国产浏览器,用的chrome内核,浏览器没有在请求头中标识自身信息。Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3//能接收什么类型的数据Accept-Encoding: gzip,deflate          //能接受的编码类型Accept-Language:zh-CN,zh;q=0.9      //能接受的语言

302响应:

HTTP/1.1 302 Found      //状态码302,临时重定向Connection: keep-aliveContent-Length: 154           //内容长度Content-Type: text/html          //主体文档类型Date: Tue, 27 Oct 2020 05:52:30 GMT       //发包时的GMT时间Location: https://www.baidu.com/             //重定向,去这个网页提取所需资源Server: BWS/1.1 Set-Cookie: Traceid: X-Ua-Compatible: IE=Edge,chrome=1//以下为网页主体302 Found




302 Found




nginx



最后通过抓取的数据包查看TLS连接建立的流程。

wireshark捕获域名解析报文 wireshark抓取http报文_webservice 抓取客户端发送包_06

第一个包,Client Hello在random和cipher_suite中分别提供了随机数和可选加密套件。第二个包,服务器接收之后,对比自己可用的加密套件,在Server Hello中发送自己的随机数和选定的加密套件。之后服务器要发送证书和自己的密钥,结束Hello(即第三个包的内容)。证书要经过客户端校验才能决定是否继续通信。第四个包,客户端发送公钥 (client key exchange),通知服务器后续的通信都采用加密通信(cipher spec),结合之前的一些信息生成一段数据,进行加密,然后发送给服务器用于握手验证(encrypted handshakemessage);第五个包,服务器通知后续通信加密,并发送数据给客户端验证,验证通过即可开始通信。Application Data即表示已经开始加密通信。

wireshark捕获域名解析报文 wireshark抓取http报文_wireshark捕获域名解析报文_07

⬅大概是这么个过程。