背景
抓包作为工作中必不可缺的技能,如果一个抓包工具失效,很多人不知道怎么去进行手中的工作,所以一定要掌握好抓包的技巧。
抓包的原理
提出问题, 什么是数据包?包是怎么传输的?
定义:包 是在tcp/ip协议传输过程中的一个数据单位
数据包的传输过程:
扩展
思考:抓包 是在哪一层操作的?我们平时工作又在哪一层?
常见的抓包
常见的抓包工具有 Charles、Fiddler
通用问题:
-
不开源
-
配置复杂
-
Charles 只适用于mac、Fiddler 只适用于windous
抓包工具推荐
-
http 、https 抓包 推荐使用 whistle
-
tcp、udp抓包 推荐使用 wireshark
-
使用代码抓包推荐 mitmproxy
whistle使用技巧
安装环境:node 环境
https://nodejs.cn/download/
安装命令:
npm install -g whistle
检查是否安装成功
whisle -V
whisle启动
w2 start
whisle 查看帮助信息
w2 help
whistle的默认端口是8899,如果要指定端口号,执行下面的命令
w2 start -p 8888
停止whistle
w2 stop
使用whistle抓包步骤
1、whisle 启动web 界面
2、手机配置代理(苹果手机举例)
手机连接公司网络-> 点击无线局域网->点击感叹号->点击配置代理->选择手动 ->服务器输入 图上ip->端口输入 图上 端口号->点击存储
3、下载https 证书
web页面 ,点击https 出现证书下载二维码,手机扫描后进行下载
4、安装证书(苹果手机举例)
设置-> 点击通用-> 点击VPN与设备管理-> 点击已下载的描述文件-> 点击安装
5、信任证书(苹果手机举例)
设置-> 点击通用->点击证书信任设置-> 打开刚刚安装的证书信任开关
6、mock 技巧
修改规则
修改成功截图
使用 wireshark抓包
1、安装wireshark
2、开始抓包(苹果手机举例)
第一步:使用USB数据线将iOS设备连接到Mac上;
第二步:获取iOS设备的UCID,可以直接使用iTunes/Xcode的organizer工具查看;
第三步:
-
- 创建rvi接口:rvictl -s
- 查看创建虚拟接口:rvictl -l
- 创建后可以使用如下命令查看虚拟接口是否创建成功:ifconfig rvi0
第四步:使用Wireshark等针对创建虚拟接口抓包
第五步:分析完成后,移除创建的rvi接口:rvictl -x
备注:Android设备需要root,使用tcpdump可以进行非Wi-Fi抓包。
3、应用场景
ipv6 与ipv4 流量浓度对比https://zhishu.zhipin.com/wiki/DcwNOsClpx6
使用mitmproxy 进行抓包
1、环境准备
基于python 环境
2、安装mitmproxy
pip3 install mitmproxy
3、启动mitmproxy
启动 mitmproxy 用 mitmproxy、mitmdump、mitmweb 这三个命令中的任意一个即可
mitmproxy:脚本模式
mitmdump:后台模式
mitmweb:web 模式
参数介绍:
4、启动后连接代理
同 上
5、安装证书
http://mitm.it/
6、脚本编写
import mitmproxy.http
from mitmproxy import ctx
class Counter:
def __init__(self):
self.num = 0
def request(self, flow: mitmproxy.http.HTTPFlow):
self.num = self.num + 1
ctx.log.info("请求的url为:"+flow.request.pretty_url )
def response(self, flow: mitmproxy.http.HTTPFlow):
ctx.log.info("请求的返回值为:" + flow.response.get_text())
addons = [
Counter()
]
7、实现代码抓包