Wireshark:抓取 HTTP 包

783 阅读3分钟

开篇简要

初识 Wireshark 简单介绍了强大的 Wireshark 工具,想用好或者是说想发挥 Wireshark 的巨大威力,还有很长的路要走(对我来说)。学习 Wireshark 的成本要比其他网络抓包工具的成本高,所以请做好学习的准备。

我身边很多开发同事,甚至包括一些刚入职的测试工程师都不喜欢使用抓包工具,遇到问题凭着自己的感觉在那里侃侃而谈,既耽误时间又没有解决问题,有时候还伤了和气,明明可以使用工具可以解决的问题,偏偏要各抒己见。

说到 Wireshark 更是很少人使用,至少我身边的同事是这样。如果让你一直去看那些 RFC 等网络协议,不到半小时估计你就会感到疲惫,但是结合 Wireshark 来理解网络协议就会感到无比的快乐,何乐而不为呢?!

继续阅读下去,你可以了解到如下几个知识:

1. 如何抓取 PC 端、iOS 设备的网络包?

2. 使用一些过滤条件如何查看包的内容?

3. 如何在 Wireshark 中显示域名?

PC 端的 HTTP 请求

打开 Wireshark,选择对应的网口,因为我使用的是无线网络(WiFi),所以选择 Wi-Fi:en0 这个网口,你可以根据你的网络使用情况来选择对应的网口,如下图:

可以看到对应有网络数据的网口,Wireshark 还在右侧显示对应的波浪,很人性化的设计。双击对应的网口,就可以使用 Wireshark 来抓包看数据了。

下面我就以 PC 端访问 www.veryitman.com 来演示 HTTP 请求的抓包情况。

查看本机的 ip 地址,我的是 10.4.17.7, 再来看一下 www.veryitman.com 对应的 ip 地址:

ping ww.veryitman.com

显示结果如下:

64 bytes from 185.199.110.153: icmp_seq=0 ttl=52 time=317.074 ms

那么, 185.199.110.153 就是其对应的 ip 地址。总的来说,对于 PC 端,源地址是 10.4.17.7,目的地址是 185.199.110.153,对于服务器来说,正好反过来。

首先在过滤器中输入 http, 如下图所示:

然后打开浏览器,我使用的是 Chrome,打开 http://www.veryitman.com/2018/08/20/%E5%88%9D%E8%AF%86-Wireshark/ 网站站点,Wireshark 显示如下(部分截图):

改变一下过滤语句,将之前的 http 改为 ip.src==10.4.17.7 && http && ip.dst==185.199.109.153, 显示如下:

可以选择任何一个请求,展示区域如下:

上图中的三个区域分别对应的是 View 中的 Packet ListPacket DetailsPacket Bytes 三个视图。

选择任何一个请求,在对应的 区域2 可以看到该请求的详情。

刚才使用的过滤条件只看到 PC(客户端)的请求,没有看到服务器返回信息,我们修改一下过滤条件为 ip.src==185.199.109.153 && http && ip.dst==10.4.17.7,这样就看以看到服务器的回包信息了,如下图所示:

双击进入该响应,就可以看到对应的响应数据详情了。

iOS 设备的 HTTP 请求

跟查看 PC 端的 HTTP 请求方式基本一致,只是此时的本机 ip 地址是手机端的而不是 pc 端的。

初识 Wireshark 中已经跟大家分享过如何去连接 iOS 设备到 Wireshark 抓包了,这里不再赘述。

至于查看 iOS 设备的 ip 地址,就很简单了,打开 设置/wifi 看一下详情就知道了。

显示域名

如果你经常使用 Charles 抓包,就可以发现 Charles 展示的请求中都是以域名来显示的,但是在 Wireshark 都是显示 ip 地址,或许因此感到不适,那么,Wireshark 能否展示域名呢?

Wireshark 是可以像 Charles 那样展示域名的,只是它默认显示 ip 地址罢了。

打开 Preferences,如图:

这样 Wireshark 的显示就是另一番景象了如下图所示:

当然,你也看出来了,过滤条件还是可以使用的。

你还可以使用其他的过滤条件,如下面的一些过滤条件,能帮你快速定位你要的数据。

http.host == "veryitman.com"

http.host contains "veryitman.com"

http contains "HTTP/1.1 200 OK"

千与千寻:不能吃太胖哦,会被杀掉的...~