为什么要抓包
- 查看网络接口的发包和回包,分析app的行为
- 定位网络问题
- 了解网络协议的细节
- 通过篡改数据包构造某些场景的测试用例
- 获取web网站的cookie session状态信息
- 估计网络接口的性能
常见的抓包工具:
常见的网络抓包工具大体上按照抓包节点可以分成两类:
一种是通过代理中间服务截取协议包,例如Whistle,Charles,Fiddler,miniproxy一种是在网卡链路层截取数据包,例如warshark, tcpdump
还有像,Chrome浏览器的调试工具,这种属于工具本身内置的能力。
根据其实现方式,它们的能力界限各有特点。下面是一个大致的比较:
工具 | 适用平台 | 截包原理 | 配置和安装 | 主要功能和特点 | 优点 | 缺点 |
---|---|---|---|---|---|---|
Fiddler | Windows/Mac/Linux | http代理 | easy | 支持基本的包过滤,内容查看,断点,重放,改包,弱网模拟以及自定义扩展等 | 功能齐全 | 经典版只能运行在Windows平台上,最近也有跨平台版本,但是不免费;扩展依赖老套的.Net框架,需要会写C# |
Charles | Mac/windows | http代理 | 依赖jdk | 支持断点调试,https包抓包,重放,改包,模拟3G慢速网络,模拟小型压力测试 | 功能比较全 | 不免费 |
Whistle | 运行在浏览器上,跨平台 | http代理 | 依赖nodejs | 对于特定的http协议,有丰富的功能 | 只能抓http协议 | |
Chrome/FireFox的网络分析工具 | 运行在浏览器上 | 无须安装,浏览器自带 | 可以满足基本的请求协议内容审查,重放的需求 | 使用方便直接 | 缺少一些抓包工具实现的一些高级高能,如rewrite,断点,弱网模拟,串改包内容的功能 | |
tcpdump | Linux/Windows/Mac | 截取网卡包 | Linux系统一般自带,不需要安装,可以直接使用 Unix like系统一般自带这个工具,命令行;在windows上安装依赖wincap Unix类的系统基本不需要安装。 | 使用时方便直接,尤其是在Unix-like的机器上,熟悉其命令可以开箱即用 | 命令行工具,数据都是白的,通常需要自己写脚本分析,有些用户喜欢在服务端抓取后交给warshark分析 | 对于加密协议包分析复杂,需要自行解密,包分析困难,要借住warshark |
Warshark | WIndows和Mac主流操作系统 | 截取网卡包 | easy,依赖libcap | warshark几乎可以抓取经由网卡的所有网络协议的数据包 | 需要学习 可以抓取几乎所有网络协议的数据 | 一般服务器没有UI,远程抓包需要办一些手续;对加密数据,如https需要用户自己想办法解包 |
总结:
通过以上的比较,大体上,这几个主流的抓包工具基本上可以满足我们日常的抓包需求
抓取http/https包, 抓取app手机应用的包,或有比较高级的需求,比如包篡改,app行为分析,首选Fiddler和whistle,或者用破解版的Charles(不提倡)。通常没有扩展和插件开发的需要,首选whistle,跨平台,能力几乎近似,但是如果你要考虑开发插件实现一些自己的定制化需求,就得具体看你熟悉哪种语言,熟悉C#当然使用Fiddler也是可以的,熟悉python用于爬虫,渗透场景可以使用mitmproxy ,Whistle的扩展需要对JavaScript和nodejs有一定的掌握。
Web上的http/https请求,仅仅是希望看下数据请求参数和返回,获取uri,参数这些基本的诉求,可使用浏览器自带的http分析工具,没必要安装抓包工具
抓取其它协议,如tcp,直播协议HLS,RTMP这些低层次的网络协议包,首选warshark;简单的网络分析和问题定位在可以直接敲tcpdump命令,系统复杂的网络分析任务可使用warshark,warshark支持远程抓包,对于tcpdump的优势是它有UI可以比较友好地分析数据包
抓包工具能力图:
rewrite
replay
breakpoint
断点使得请求在发送之前暂停下来,你可以做一些事情,例如修改参数。断点支持再before request断点,这时可以改变请求参数,也可以在after response断点,这时可以改变回包参数;
频繁的修改,可以用rewrite功能进行替换。throtting
抓包工具一般也可用于调整Internet连接的带宽和延迟。这个功能可以用来模拟调制解调器的各种条件。
比方说,带宽可以限制到每秒任意字节,利用这点可以模拟任何连接速度,延迟也可以设置为任意的毫秒数。从而大致上可以模拟一个弱网环境。proxy
代理是抓包工具最基本的功能,通过代理,我们可以做一些基本的事情,查看网络协议的发送,接收细节
在发送参数,和返回数据上作修改,进行开发调试
6.反向代理
反向代理在本地端口上创建一个 Web 服务器,该服务器透明地将请求代理到远程 Web 服务器。反向代理上的所有请求和响应都可能记录在 Charles 中。
如果您的客户端应用程序不支持使用 HTTP 代理,或者您想避免将其配置为使用代理,则反向代理非常有用。创建到原始目标 Web 服务器的反向代理,然后将客户端应用程序连接到本地端口;反向代理对客户端应用程序是透明的,使您能够查看 Charles 中以前可能无法查看的流量。
7 端口转发。
可以使用代理工具配置tcp/udp协议的端口转发 内网渗透中的端口转发
抓包原理
网络数据收发是一个数据流,我们要查看数据包的细节,一般的方法是,在客户端和服务器之间进行截获。
一般有两种方式:
一种是设置代理抓取http包,比如Charles、mitmproxy这些软件。
另一种是直接抓取经过网卡的所有协议包,其中最出名就是大名鼎鼎的wireshark以及linux自带的抓包软件tcpdump。
- 在本地网卡出包前上抓,比如tcpdump从网卡的链路层抓取数据;
- 伪造中间人代理服务器截获,服务器完成报文解析工作,并转发数据;
Fiddler Charles和Whistle基本上都是这样实现的。
参考文档:
- Fiddler使用文档
- whistle使用文档
-
Charles使用文档
-《Wireshark网络分析就这么简单》