记得我大三的时候有一门课叫计算机网络,是我最喜欢的王勇老师上的,当时勇哥给我们介绍了抓包工具,也是我第一次接触这玩意儿,当时用的wireshark,除了这个工具的名字貌似我什么都不记得了(>_<|||)。当时觉得这个工具应该和我以后的工作没多大联系吧,没想到出来做前端后,经常要用到抓包工具,特别是用来进行前端调试,觉得太赞了,我们可以用本地的文件来替换线上的文件,从而修复一些bug,还可以模拟不同的网络环境,或者设置网络请求。。。推荐一下我常用的两款抓包工具吧,一是fiddler,再就是我接下来介绍的charles。
Charles 是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。工具就介绍这么多了,接下来介绍一下主要功能吧。
将 Charles 设置成系统代理
选择菜单中的 “Proxy” -> “Mac OS X Proxy” 来将 Charles 设置成系统代理。如下所示:
需要注意的是,Chrome 和 Firefox 浏览器默认并不使用系统的代理服务器设置,而 Charles 是通过将自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取 Chrome 和 Firefox 浏览器的网络通讯内容。如果你需要截取的话,在 Chrome 中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成 127.0.0.1:8888 也可达到相同效果。
用 Map 功能来修改服务器返回内容
Charles 的 Map 功能分 Map Remote 和 Map Local 两种,顾名思义,Map Remote 是将指定的网络请求重定向到另一个网址请求地址,Map Local 是将指定的网络请求重定向到本地文件。在 Charles 的菜单中,选择 “Tools”->”Map Remote” 或 “Map Local” 即可进入到相应功能的设置页面。下面我来举一个 “Map Local” 的栗子:
第一步:选择需要抓包的请求,并且保存文件到本地,如下图所示,我们来抓取 http://yuyouyou.github.io/ 下面的main.js文件:
第二步:设置“Map Local”,如下图所示:
第三步:打开刚才抓取的js文件,并且编辑一下再保存,如下图所示:
现在访问 http://yuyouyou.github.io/ 就可以看到修改后的js文件替换了线上的js文件,是不是很酷啊,这对于我们调试线上的文件非常有帮助。
过滤网络请求
如果我们需要只监控向指定目录服务器上发送的请求。有以下几种方法:
方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:http://yuyouyou.github.io/ , 那么只需要在 Filter 栏中填入 yuyouyou 即可。
方法二:在 Charles 的菜单栏选择 “Proxy”->”Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。如下图所示:
方法三:在想过滤的网络请求上右击,选择 “Focus”,之后在 Filter 一栏勾选上 Focussed 一项,如下图所示:
给服务器做压力测试
我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力。我们在需要打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项,接着我们就可以在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。
截取 iPhone 上的网络封包
Charles 上的设置
要截取 iPhone 上的网络请求,我们首先需要将 Charles 的代理功能打开。在 Charles 的菜单栏上选择 “Proxy”->”Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的设置。iPhone 上的设置
首先我们需要获取 Charles 运行所在电脑的 IP 地址,Charles 的顶部菜单的 “Help”->”Local IP Address”,即可在弹出的对话框中看到 IP 地址。然后,在 iPhone 的 “ 设置 “->” 无线局域网 “ 中,可以看到当前连接的 wifi 名,通过点击右边的详情键,可以看到当前连接上的 wifi 的详细信息,包括 IP 地址,子网掩码等信息。在其最底部有「HTTP 代理」一项,我们将其切换成手动,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888。设置好之后,我们打开 iPhone 上的任意需要网络通讯的程序,就可以看到 Charles 弹出 iPhone 请求连接的确认菜单,点击 “Allow” 即可完成设置。接下来就可以愉快的抓取手机的请求了(^∀^)。
模拟慢速网络
在 Charles 的菜单上,选择 “Proxy”->”Throttle Setting” 项,在之后弹出的对话框中,我们可以勾选上 “Enable Throttling”,并且可以设置 Throttle Preset 的类型。如下图所示: