我们这个信息化时代,每天都不知不觉的会给不知道哪些软件运营商偷偷的说一些悄悄话,特别是我们程序猿,在开发过程中更是,偶尔会遇到不知道TCP交互过程中到底传递或者接受了哪些信息,给我们的Debug蒙上了一层神秘的面纱,这时候,我们需要一些抓包工具帮助我们轻松Debug。一般的请求可以借助浏览器自带的NetWork抓包工具,移动端一些网页的话可以借助腾讯开源的vConsole,再高端一点就是借助Fiddler来抓取http或者https请求。但是有时候这样也满足不了我们的需要,那么就再祭出Wireshark神器来抓取tcp和udp请求。

浏览器自带的抓包工具

一些主流浏览器都自带有Network抓包工具,只需F12即可唤出,非常方便,我这里只演示了 Chrome浏览器的抓包过程。

打开网易新闻 查看精彩图片

Fiddler简单操作

Fiddler是一款http\https协议代理调试工具,它能够获取请求之间的数据和状态,设置断点,以及修改数据。首先去Fiddler网站下载并手动安装。

打开网易新闻 查看精彩图片

安装成功后打开Fiddler,界面如下:

打开网易新闻 查看精彩图片

默认情况下,它是抓取我们所有的请求。我们需要对Fiddler进行过滤设置。假如我们只想抓取www.cnblogs.com的请求,我们需要这样处理:

打开网易新闻 查看精彩图片

,最后我们可以得到这样的效果:

打开网易新闻 查看精彩图片

,
还可以指定客户端的进程:

打开网易新闻 查看精彩图片

进程方式除了刚才在Filters中设置外,还可以使用拖动方式,

打开网易新闻 查看精彩图片

下面,我们来试试抓取手机端的请求,在抓取手机端请求前,请确保手机和电脑在同一个局域网中,然后进入Tools->Options->Connections对Fiddler进行如下设置:

打开网易新闻 查看精彩图片

,
由于我在PC端映射了一个wifi供手机连接,故我手机代理设置如下:

打开网易新闻 查看精彩图片

假如我们抓取美团App的请求,现在打开App即可看到:

打开网易新闻 查看精彩图片

这里只是一个简单的示例介绍,更多高深技巧请自行探索。

Wireshark简单操作

首先Wireshark下载,

打开网易新闻 查看精彩图片

安装完成后打开

打开网易新闻 查看精彩图片

可以看到我们本地有很多网卡驱动,我们怎么知道现在网络是哪个网卡呢?有两个方式,一个是查看本地连接,另外一个就是看界面的网络流量。

打开网易新闻 查看精彩图片

可以看到Wireshark开始为我们抓包,由于Wireshark为我们抓取了TCP和HTTP,会有很多无用的信息导致我们无从下手,这时候可以使用Wireshark的过滤规则:

打开网易新闻 查看精彩图片

,
在过滤栏输入关键字就会有相应的智能提示。 在Wireshark抓包中有多层信息:

  • Frame 15788: 79 bytes on wire (632 bits), 79 bytes captured (632 bits) on interface \Device\NPF_{69B14E8C-A0A5-4064-9CF7-EB4651D24A99}, id 0:物理层的数据帧概况。
  • Ethernet II, Src: HuaweiTe_22:5a:c6 (fc:48:ef:22:5a:c6), Dst: WistronI_fd:67:50 (54:ee:75:fd:67:50):数据链路层以太网帧头部信息。
  • Internet Protocol Version 4, Src: 10.101.11.97, Dst: 10.101.27.241:互联网层IP包头部信息,源地址和目的地址。
  • Transmission Control Protocol, Src Port: 80, Dst Port: 50773, Seq: 2606, Ack: 3560, Len: 25:传输层的数据段头部信息,TCP协议层信息。
  • Hypertext Transfer Protocol:应用层的信息,此处是HTTP\HTTPS协议会现在该项。Wireshark常用过滤条件:地址过滤。ip.dst==xxx.xx.xxx.xxx 过滤目的地址为xxx.xx.xxx.xxx,ip.src==xxx.xx.xxx.xxx 过滤源地址地址为xxx.xx.xxx.xxx,ip.dst==xxx.xx.xxx.xxx && ip.src==xxx.xx.xxx.xxx 过滤源地址为xxx.xx.xxx.xxx且目的地址xxx.xx.xxx.xxx协议过滤。直接在过滤栏输入协议即可 tcp、udp、arp、http、ftp、ssl、smtp、dns、ip、ardp端口过滤。在过滤栏输入tcp.port==端口号(目的端口和源端口)或者 tcp.dstport==端口号(目的端口),tcp.srcport==端口号(源端口)HTTP过滤。这个就比较多了,暂时详述:

通过Wireshark可以很方便的分析TCP的三次握手和四次挥手的过程,有助于我们更加直观的理解TCP协议。

好了,暂时先告一段落吧,这里只是简单是写了软件的基本使用,如果要抓取HTTP和HTTPS协议的数据的话,个人建议使用Fiddler。其他更加高级的应用在后面再分享吧,另外还有一款强大的抓包工具Charles,只不过它是收费的。