使用wireshark分析http
2018-03-21 本文已影响108人
魁爷的黑作坊
由于最近要分析shadowsocks的源码,所以从最简单的抓裸奔的包开始,即最简单的http包。http协议已经十分熟悉了,但是从底层的tcp开始还是第一次研究。
准备工作
准备要抓的http包
尝试直接抓网站的首页,发现又是文字又是图片,不好分析。所以就抓一些简单的文本,类似css或者是github上面的raw,尼玛只能抓一次,后面刷新就是304了。之后直接在自己的服务器上部署一句PHP代码,之后抓都是200了。
<?php
echo "this is test";
准备抓包工具
这里使用的是著名的wireshark,进入后选择网卡,然后过滤ipip.addr == IP
即可抓到需要测试的http包
开始抓包
在wireshark点击开始捕获,然后再浏览器刷新部署在服务器上的动态页面,就可以抓到最原生态的http包了
wireshark抓包截图以上就是最原生态的http的原始包
抓包分析
包序列为了描述的更加清楚,以下所说的包的序列如图中的黑框所示
分析过程
TCP/IP连接的创建
- 27号包 客户端向http服务器的80端口发送SYN请求连接
- 43号包 http服务器的80端口发送ACK应答,允许连接
- 44号包 客户端向服务端再发送应答码,完成三次握手
http包分析
- 48号包 客户端向服务器发送请求头
- 57号包 服务端接收信息,发送应答码
- 58号包 服务端将html文档返回给客户端
- 64号包 客户端收到服务端发送的信息,发送应答码
TCP/IP连接断开
- 130号包 http服务器端主动断开连接,发送SYN,服务端说再见
- 131号包 客户端发送准许断开的应答码
- 189号包 客户端发送再见
- 191号包 服务端含泪最终告别
遇到的问题
测试过程中服务端发送完html的信息之后并没有马上断开连接,而是过了一段时间,这是什么原因
客户端收到服务器端的html中,头部有Keep-Alive:timeout=5
即说明服务器在发送完这个html文档后有5秒钟的时间继续等待,如果客户端在这5秒内继续向服务端请求数据,服务端会继续做出回复,如果没有数据交换,则5秒钟之后,服务器端会主动断开连接。这样做是为了减少http服务器不必要的握手,加快传输速度。