开篇简要

初识 Wireshark 简单介绍了强大的 Wireshark 工具,想用好或者是说想发挥 Wireshark 的巨大威力,还有很长的路要走(对我来说)。学习 Wireshark 的成本要比其他网络抓包工具的成本高,所以请做好学习的准备。
我身边很多开发同事,甚至包括一些刚入职的测试工程师都不喜欢使用抓包工具,遇到问题凭着自己的感觉在那里侃侃而谈,既耽误时间又没有解决问题,有时候还伤了和气,明明可以使用工具可以解决的问题,偏偏要各抒己见。
说到 Wireshark 更是很少人使用,至少我身边的同事是这样。如果让你一直去看那些 RFC 等网络协议,不到半小时估计你就会感到疲惫,但是结合 Wireshark 来理解网络协议就会感到无比的快乐,何乐而不为呢?!
继续阅读下去,你可以了解到如下几个知识:
1. 如何抓取 PC 端、iOS 设备的网络包?
2. 使用一些过滤条件如何查看包的内容?
3. 如何在 Wireshark 中显示域名?

PC 端的 HTTP 请求

打开 Wireshark,选择对应的网口,因为我使用的是无线网络(WiFi),所以选择 Wi-Fi:en0 这个网口,你可以根据你的网络使用情况来选择对应的网口,如下图:
image.png
可以看到对应有网络数据的网口,Wireshark 还在右侧显示对应的波浪,很人性化的设计。双击对应的网口,就可以使用 Wireshark 来抓包看数据了。
下面我就以 PC 端访问 www.veryitman.com 来演示 HTTP 请求的抓包情况。
查看本机的 ip 地址,我的是 10.4.17.7, 再来看一下 www.veryitman.com 对应的 ip 地址:

  1. ping ww.veryitman.com

| 1 | | | :—- | :—- |

显示结果如下:

  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, 如下图所示:
Wireshark:抓取 HTTP 包 - 图2
然后打开浏览器,我使用的是 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 显示如下(部分截图):
Wireshark:抓取 HTTP 包 - 图3
改变一下过滤语句,将之前的 http 改为 ip.src==10.4.17.7 && http && ip.dst==185.199.109.153, 显示如下:
Wireshark:抓取 HTTP 包 - 图4
可以选择任何一个请求,展示区域如下:
Wireshark:抓取 HTTP 包 - 图5
上图中的三个区域分别对应的是 View 中的 Packet ListPacket DetailsPacket Bytes 三个视图。
Wireshark:抓取 HTTP 包 - 图6
选择任何一个请求,在对应的 区域2 可以看到该请求的详情。
刚才使用的过滤条件只看到 PC(客户端)的请求,没有看到服务器返回信息,我们修改一下过滤条件为 ip.src==185.199.109.153 && http && ip.dst==10.4.17.7,这样就看以看到服务器的回包信息了,如下图所示:
Wireshark:抓取 HTTP 包 - 图7
双击进入该响应,就可以看到对应的响应数据详情了。

iOS 设备的 HTTP 请求

跟查看 PC 端的 HTTP 请求方式基本一致,只是此时的本机 ip 地址是手机端的而不是 pc 端的。
初识 Wireshark 中已经跟大家分享过如何去连接 iOS 设备到 Wireshark 抓包了,这里不再赘述。
至于查看 iOS 设备的 ip 地址,就很简单了,打开 设置/wifi 看一下详情就知道了。

显示域名

如果你经常使用 Charles 抓包,就可以发现 Charles 展示的请求中都是以域名来显示的,但是在 Wireshark 都是显示 ip 地址,或许因此感到不适,那么,Wireshark 能否展示域名呢?
Wireshark 是可以像 Charles 那样展示域名的,只是它默认显示 ip 地址罢了。
打开 Preferences,如图:
Wireshark:抓取 HTTP 包 - 图8
Wireshark:抓取 HTTP 包 - 图9
这样 Wireshark 的显示就是另一番景象了如下图所示:
Wireshark:抓取 HTTP 包 - 图10
当然,你也看出来了,过滤条件还是可以使用的。
你还可以使用其他的过滤条件,如下面的一些过滤条件,能帮你快速定位你要的数据。

  1. http.host == "veryitman.com"
  2. http.host contains "veryitman.com"
  3. 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数据包

  1. http.host==magentonotes.com #完整匹配
  2. http.host contains magentonotes.com #模糊匹配
  3. //过滤经过指定域名的http数据包,这里的host值不一定是请求中的域名
  4. http.host contains qq or http.host contains tencent

image.png
image.png
image.png
image.png

  1. http.response.code==302
  2. //过滤http响应状态码为302的数据包
  3. http.response==1
  4. //过滤所有的http响应包
  5. http.request==1
  6. //过滤所有的http请求,貌似也可以使用http.request
  7. http.request.method==POST
  8. //wireshark过滤所有请求方式为POSThttp请求包,注意POST为大写
  9. http.cookie contains guid
  10. //过滤含有指定cookiehttp数据包
  11. http.request.uri==”/online/setpoint
  12. //过滤请求的uri,取值是域名后的部分
  13. http.request.full_uri==” http://task.browser.360.cn/online/setpoint
  14. //过滤含域名的整个url则需要使用http.request.full_uri
  15. http.server contains nginx
  16. //过滤http头中server字段含有nginx字符的数据包
  17. http.content_type == text/html
  18. //过滤content_typetext/htmlhttp响应、post包,即根据文件类型过滤http数据包
  19. http.content_encoding == gzip
  20. //过滤content_encodinggziphttp
  21. http.transfer_encoding == chunked
  22. //根据transfer_encoding过滤
  23. http.content_length == 279
  24. http.content_length_header == 279
  25. //根据content_length的数值过滤
  26. http.server
  27. //过滤所有含有http头中含有server字段的数据包
  28. http.request.version == HTTP/1.1
  29. //过滤HTTP/1.1版本的http包,包括请求和响应
  30. http.response.phrase == OK
  31. //过滤http响应中的phrase

原创文章,转载请注明:转载自Web开发笔记 | Wireshark过滤规则之:http数据包
本文链接地址:https://www.magentonotes.com/wireshark-filter-http-packet.html