开篇简要
初识 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
| 1 | | | :—- | :—- |
显示结果如下:
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/](http://www.veryitman.com/2018/08/20/%25E5%2588%259D%25E8%25AF%2586-Wireshark/) 网站站点,Wireshark 显示如下(部分截图):
改变一下过滤语句,将之前的 http 改为 ip.src==10.4.17.7 && http && ip.dst==185.199.109.153, 显示如下:
可以选择任何一个请求,展示区域如下:
上图中的三个区域分别对应的是 View 中的 Packet List, Packet Details,Packet 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"
http://www.veryitman.com/2018/09/01/Wireshark%EF%BC%9A%E6%8A%93%E5%8F%96-HTTP-%E5%8C%85/
Wireshark过滤规则之:http数据包
http.host==magentonotes.com #完整匹配http.host contains magentonotes.com #模糊匹配//过滤经过指定域名的http数据包,这里的host值不一定是请求中的域名http.host contains qq or http.host contains tencent




http.response.code==302//过滤http响应状态码为302的数据包http.response==1//过滤所有的http响应包http.request==1//过滤所有的http请求,貌似也可以使用http.requesthttp.request.method==POST//wireshark过滤所有请求方式为POST的http请求包,注意POST为大写http.cookie contains guid//过滤含有指定cookie的http数据包http.request.uri==”/online/setpoint”//过滤请求的uri,取值是域名后的部分http.request.full_uri==” http://task.browser.360.cn/online/setpoint”//过滤含域名的整个url则需要使用http.request.full_urihttp.server contains “nginx”//过滤http头中server字段含有nginx字符的数据包http.content_type == “text/html”//过滤content_type是text/html的http响应、post包,即根据文件类型过滤http数据包http.content_encoding == “gzip”//过滤content_encoding是gzip的http包http.transfer_encoding == “chunked”//根据transfer_encoding过滤http.content_length == 279http.content_length_header == “279″//根据content_length的数值过滤http.server//过滤所有含有http头中含有server字段的数据包http.request.version == “HTTP/1.1″//过滤HTTP/1.1版本的http包,包括请求和响应http.response.phrase == “OK”//过滤http响应中的phrase
原创文章,转载请注明:转载自Web开发笔记 | Wireshark过滤规则之:http数据包
本文链接地址:https://www.magentonotes.com/wireshark-filter-http-packet.html
