这是「进击的Coder」的第 399 篇技术分享
作者:李运辰
来源:Python 研究者
“
阅读本文大概需要 7 分钟。
”玩爬虫的小伙伴都知道,抓包工具除了 MitmProxy 外,还有 Fiddler、Charles 以及浏览器 netwrok 等
既然都有这么多抓包工具了,为什么还要会用 MitmProxy 呢??今天教大家使用 MitmProxy 抓包工具的原因,主要有以下几点:
不需要安装软件,直接在线(浏览器)进行抓包(包括手机端和 PC 端)
配合 Python 脚本抓包改包(下面会有案例)
抓包过程的所有数据包都可以自动保留到 txt 里面,方便过滤分析
使用相对简单,易上手。
1. 配置MitmProxy
MitmProxy 可以说是客户端,也可以说是一个 python 库
方式一:客户端
https://mitmproxy.org/downloads/
在这个地址下可以下载对应的客户端安装即可
![](https://i-blog.csdnimg.cn/blog_migrate/32b490312476c928b22c3a3807ea1768.png)
方式二:Python 库
pip install mitmproxy
通过这个 pip 命令可以下载好 MitmProxy,下面将会以 Python 库的使用方式给大家讲解如何使用(推荐方式二)
2. 启动MitmProxy
MitmProxy 启动有三个命令(三种模式)
mitmproxy,提供命令行界面
mitmdump,提供一个简单的终端输出(还可以配合 Python 抓包改包)
mitmweb,提供在线浏览器抓包界面
mitmdump 启动
mitmdump -w d://lyc.txt
![](https://i-blog.csdnimg.cn/blog_migrate/d9587a2ab4e215d165ecc70ae2c1343c.png)
这样就启动 mitmdump,接着在本地设置代理 Ip 是本机 IP,端口 8080
![](https://i-blog.csdnimg.cn/blog_migrate/d60b2e3e459712551928b4fe68815d8c.png)
安装证书
访问下面这个链接
http://mitm.it/
![](https://i-blog.csdnimg.cn/blog_migrate/0c888adfe73ebb2c889781762e2141d3.png)
可以选择自己的设备(window,或者 Android、Apple 设备去)安装证书。
然后随便打开一个网页,比如百度
![](https://i-blog.csdnimg.cn/blog_migrate/c59c5cccca29566c6dd837ad6a3730f1.png)
这里是因为证书问题,提示访问百度提示 https 证书不安全,那么下面开始解决这个问题,因此就引出了下面的这种启动方式
浏览器代理式启动
哪一个浏览器都可以,下面以 Chrome 浏览器为例(其他浏览器操作一样)
先找到 chrome 浏览器位置,我的 chrome 浏览器位置如下图
![](https://i-blog.csdnimg.cn/blog_migrate/28059b3f55167711c607c23d1c9b001b.png)
通过下面命令启动
"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
--proxy-server
是设置代理和端口--ignore-certificate-errors
是忽略证书
然后会弹出来 Chrome 浏览器,接着我们搜索知乎
![](https://i-blog.csdnimg.cn/blog_migrate/99337595c86642453037fc653d7047a3.png)
在 cmd 中就可以看到数据包
![](https://i-blog.csdnimg.cn/blog_migrate/20ec23ec1dfcfb44e002af6f5981525c.png)
这些文本数据可以在编程中进行相应的操作,比如可以放到 python 中进行过来监听处理。
3. 启动Mitmweb
新开一个 cmd(终端)窗口,输入下来命令启动 mitmweb
mitmweb
![](https://i-blog.csdnimg.cn/blog_migrate/af06e26027ee89d831be44bb970461d8.png)
之后会在浏览器自动打开一个网页(其实手动打开也可以,地址就是:http://127.0.0.1:8081)
![](https://i-blog.csdnimg.cn/blog_migrate/95a3b62c18827e5f6a1c5d40e4c9e124.png)
现在页面中什么也没有,那下面我们在刷新一个知乎页面
重点:关闭 mitmproxy 终端!关闭 mitmproxy 终端!关闭 mitmproxy 终端!
如果不改变在 mitmweb 中获取不到数据,数据只在 mitmproxy 中,因此需要关闭 mitmproxy 这个命令终端
刷新知乎页面之后如下:
![](https://i-blog.csdnimg.cn/blog_migrate/113fb40234be0c0113681cb4fbc10ba6.png)
在刚刚的网页版抓包页面就可以看到数据包了
![](https://i-blog.csdnimg.cn/blog_migrate/85c55d23da7d1a74707e35c3dc0d5e80.png)
并且还包括 https 类型,比如查看其中一个数据包,找到数据是对应的,说明抓包成功。
![](https://i-blog.csdnimg.cn/blog_migrate/12e4e90607230a87edaea6e9ec16f48c.png)
4. 配合 Python 脚本
mitmproxy 代理(抓包)工具最强大之处在于对 python 脚本的支持(可以在 python 代码中直接处理数据包)
下面开始演示,先新建一个 py 文件(lyc.py)
from mitmproxy import ctx
# 所有发出的请求数据包都会被这个方法所处理
# 所谓的处理,我们这里只是打印一下一些项;当然可以修改这些项的值直接给这些项赋值即可
def request(flow):
# 获取请求对象
request = flow.request
# 实例化输出类
info = ctx.log.info
# 打印请求的url
info(request.url)
# 打印请求方法
info(request.method)
# 打印host头
info(request.host)
# 打印请求端口
info(str(request.port))
# 打印所有请求头部
info(str(request.headers))
# 打印cookie头
info(str(request.cookies))
# 所有服务器响应的数据包都会被这个方法处理
# 所谓的处理,我们这里只是打印一下一些项
def response(flow):
# 获取响应对象
response = flow.response
# 实例化输出类
info = ctx.log.info
# 打印响应码
info(str(response.status_code))
# 打印所有头部
info(str(response.headers))
# 打印cookie头部
info(str(response.cookies))
# 打印响应报文内容
info(str(response.text))
在终端中输入一下命令启动
mitmdump.exe -s lyc.py
![](https://i-blog.csdnimg.cn/blog_migrate/ff95fc2635a58f51b5be5699ecc9fe16.png)
(PS:这里需要通过另一个端启动浏览器)
"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
然后访问网页(http://www.chenlove.cn),这里就以我自己的个人网站为例
![](https://i-blog.csdnimg.cn/blog_migrate/f7f885483da5bee56de025408fa1a5e7.png)
在终端中就可以看到信息
![](https://i-blog.csdnimg.cn/blog_migrate/052035db6d97997d65185e4c8a7b58c6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e1355172cdac1655dbf62f279c25096a.png)
这些信息就是我们在 lyc.py 中指定的显示信息。
PS:在手机上配置好代理之后,mitmproxy 同样可以抓取手机端数据,这里的具体操作和我之前这篇文章一样【以某乎为实战案例,教你用 Python 爬取手机 App 数据】,只不过是抓包工具不一样而已。
5. 总结一下
不需要安装软件,直接在线(浏览器)进行抓包(包括手机端和 PC 端)
配合 Python 脚本抓包改包。
抓包过程的所有数据包都可以自动保留到 txt 里面,方便过滤分析
使用相对简单,易上手。
End
「进击的Coder」专属学习群已正式成立,搜索「CQCcqc4」添加崔庆才的个人微信或者扫描下方二维码拉您入群交流学习。
看完记得关注@进击的Coder
及时收看更多好文
↓↓↓
好文和朋友一起看~