原理
1设置代理服务器,进行监听
抓包工具相当于在客户端和服务器端之间设置了一个中介(Proxy),客户端的请求先发送给Proxy,Proxy再转发到服务器,服务器的响应信息也是先发送给Proxy,再由Proxy转发给客户端。
2 如何做客户端和服务器端的中间人的?
2.1 截获服务器向客户端发送的证书,替换里面的公钥A为自己的公钥B;客户端对证书进行验证,主要验证签名。
2.2 截获客户端验证无问题后,决定通信密钥C。向服务器端发送的用公钥B加密后的报文,Proxy用自己的私钥解密报文,得到客户端同服务器端商议的接下来进行通信的对称密钥C。
2.3 用2.1里截获到的服务器的公钥A,对2.2中解密后的报文重新进行加密,发发送给服务器端。
2.4 代理服务器获得了通信的对称密钥,继续对通信过程进行监听,截获。
2 抓包的范围
只支持数据流协议的抓包,比如https http ftp websocoket等,不支持邮箱相关的协议(SMTP POP3)
3 Fiddler启动
3.1 Fiddler工具一启动,默认设置为本机系统的代理服务器,启动代理服务。Tools--》Options打开的窗口,选择Connections,可以看到勾选了Fiddler一启动就设置为系统代理,和监听端口8888的设置。监听端口8888表示本机8888端口对应提供代理服务器的服务。
3.2 Fiddler启动后会自动去修改IE,360,Chrom浏览器的代理设置,将他自己设置为浏览器的代理服务器,查看浏览器的代理服务器设置可以看到IP设置为本机,端口为8888。关闭Fiddler后,设置消失。
4 过滤抓包
由于Fiddler启动就自动成为系统的代理服务器,会抓取很多我们不需要的包,所以需要对抓包对象进行过滤
只抓取某个浏览器里的包
将3.1中的Act as system proxy on startup勾选掉,设置一个特殊点的端口号,比如8154。在我们要抓捕的浏览器的高级设置中,重新设置代理服务器的端口号。
设置代理服务器的端口:
手动设置浏览器:
结果:抓取到360浏览器中的包
只抓取某个网站的包
点击Fiddler中的Filters,选择过滤的策略,写入过滤的host和端口号,点击Actions下拉列表中的run filters now就可以了。比如我们只抓取简书的包
设置过滤器:
【疑问】
1 设置过滤器后,去缓存刷新抓不到包,或者多次刷新只抓到一个包,点入简书其他页面也没有包,奇怪
解决办法如下:
1.1设置抓取https 的包,安装证书。观察简书的url,发现使用的是https协议。https://www.jianshu.com/p/cd0581354da1
1.2重启电脑,估计其实不用重启。应该只需要重启下Fiddler应该就可以了。
2 单向认证可以想清楚Proxy 的原理,如果Client 和Server是双向认证的,怎么想?
3 抓包时为什么抓不到证书验证和协商通信秘钥的过程?
【参考】
https://www.jianshu.com/p/7cdd21248232