WireShark抓包工具使用小结

平时用抓包工具比较多,很多时候使用 Fidder 做一些简单的抓包,当功能不够用时,就使用 WireShark 相对于 Fidder 来说,上手比较难一点,但功能强大很多。

WireShark 就基于网卡的,也就是说只要是经过该网卡的数据包都能抓到,而 Fidder 就是相当于在本地启动了一个 HTTP 中间代理,在请求发出和接收时,将内容抓下来。

开始

很简单,点击 options ,选中需要抓包的网卡后,点 start 则可启动抓包了。

如果支接点的话,会发现不停的有包啊,什么杂七杂八想要不想要的就像瀑布一想往下滚,所以,开始之前,通常要指定一个过滤器,填在Capture fiter for selected interfaces:里面,意思就是选择网卡的过滤器。

TIP1 : WireShark过滤器说明在 Help -> Manual pages -> WireShark Fiter
TIP2 : 网卡开始抓取前使用的过滤器和抓取后能使用的过滤器是不一样的,通常指定协议就可以过滤掉大部分不需要抓的包了。

TCP

先看抓的结果图:如下

wireshark抓包列表

抓包记录里面,Source 表示请求源IP, Destination 表示目的IP,还有一个就是 Info,里面有这样的信息 65206 -> 80 [ACK] Seq=1 … 先了解一下基本常识:

TCP协议状态:

状态 说明
SYN 建立连接
FIN 关闭连接
ACK 响应
PSH 有DATA数据传输
RST 连接重置

其中,ACK 是与 SYN,FIN 等同时使用的,比如 SYN 和 ACK 同时为1,它表示的就是建立连接之后的响应,

如果只是单个的一个 SYN,它表示的只是建立连接。

TCP协议的三次握手

简单点说

  1. A 请求 B 的时候,A 要先发个数据给 B,要求建立连接,就是第一次
  2. B 收到数据后,B 再发个数据给 A,就是第二次
  3. A 收到 B 的数据后,再发个数据给 B,连接建立完成。

详细的可以 Google,里面有发送的数据包,数据状态的详细定义,这里面只要知道有三次握手即可。

wireshark抓包Follow Stream

为什么呢?如上图,我一般用 Follow -> TCP Stream 去查看请求与响应的信息。但是每次一 Follow 后,过滤器中会自动改为 tcp.stream eq xxx ,也就是自动给一个TCP会话定了一个ID,这样一看,在我抓的 GET / 之前的三个交互,就是三次握手了,分别是

  1. 本机向目标148服务器发送了一个62字节的数据包,里面包括一些要求建立连接的数据
  2. 目标服务器向本机也发送了一个数据包,里面包括一些信息
  3. 本又发送了一个数据包,建立连接完成
  4. HTTP 请求,都知道 HTTP 是 TCP 的子协议了,就不多说了,469字节的数据包除了以上那些,还包括请求地址,请求头,请求体等信息。
  5. 响应头回来了,
  6. 7、8、9 响应体也来了,由于体积较大,所以就分段返回。

当然,很多时候会发现1个 Tcp 会话中,有多个 HTTP 会话,实际上是浏览器收到了网页后,发现还要请求其它资源,就没有关闭连接,接着再发 HTTP 请求了。这样就结省了几次握手的时间。

常用方法:

  1. WireShark的核心还是基本功,基本功强的,可以看懂各种数据包,由于本人基本功太弱,就不献丑了
  2. 在Source、Destinaion、Length三列,可以右键 -> Apply as Filter -> Selected 、 AND 、 OR 、AND NOT 、OR NOT,快速的添加到过滤器当前的条件,非常好用
  3. 很多网页都是Gzip压缩的,直接Folow会有乱码,在 Edit -> Preference -> Protocols -> HTTP 里面,勾选 Uncompress entity bodies 可以查看的时候自动解GZIP压缩,不过需要HTTP响应头里面包含 Content-Encoding:gizp,才能生效
  4. 如果还是找不到你要找的包,可以使用 File -> Export Objects -> HTTP,可以比较清楚的看到HTTP请求。选中Save即可,不到紧急时刻,不要 Sava All,不服去试。