前言
今天来介绍一款特别牛批的抓包工具 mitmproxy,这款工具和charles有着相同点,但是他比charles有着更强大的功能,现在就听我的介绍吧
一.介绍
mitmproxy代理的功能
实时拦截、修改 HTTP/HTTPS 请求和响应
可保存完整的 http 会话,方便后续分析和重放
支持反向代理模式将流量转发到指定服务器
支持用 Python 脚本对 HTTP 通信进行修改【重点】
和charles的区别
mitmproxy 就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the-middle attack)。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为。
不同于 charles 抓包工具,mitmproxy 不仅可以截获请求帮助开发者查看、分析,更可以通过自定义脚本进行二次开发。举例来说,利用 charles 可以过滤出浏览器对某个特定 url 的请求,并查看、分析其数据,但实现不了高度定制化的需求,比如:“截获对浏览器对该 url 的请求,将返回内容置空,并将真实的返回内容存到某个数据库,出现异常时发出邮件通知”。而对于 mitmproxy,这样的需求可以通过载入自定义 python 脚本轻松实现。
官网
mitmproxy - an interactive HTTPS proxyhttps://mitmproxy.org/
二.安装
方式一:官网下载安装包,安装,一路下一步安装--》安装后安装路径自动加入环境变量
https://mitmproxy.org/
方式二:使用pip 安装(我们装在了虚拟环境中)
pip3 install mitmproxy
而今天我们主要是看他在python中的作用,所以我们选择pip安装
安装好执行 mitmdump --version
这就是以及安装成功
三.使用
启动
-mitmdump 命令窗口启动
-mitmweb web页面启动
为了页面可观好看,我们一般都是用web页面启动,启动好我们跳到这个页面
再把手机wifi的端口改成8080,上面写本机ip地址,就和charles抓包一样,不记得的人可以去看一下我app逆向种讲的charles配置
这样就可以抓http的包了,现在还需要配置抓取https的包
四.配置证书
手机端访问 mitm.it下载好帮他放入证书,下载好movecert模块重启就能抓取https的包了,前面我给的链接里有详细讲这些
这就可以抓到https的包了
五.python基本使用
from mitmproxy import http
def request(flow: http.HTTPFlow):
if 'login/login.ashx' in flow.request.path:
print(type(flow.request)) # mitmproxy.http.Request
print(flow.request.path)
print(flow.request.query)
print(flow.request.url)
# 修改请求头
# flow.request.headers['aa']='zz'
# 使用代理
# address = (ip, port)
# print(address)
flow.server_conn.via = ServerSpec(("http", address))
def response(flow: http.HTTPFlow):
if 'login/login.ashx' in flow.request.path:
print(type(flow.response))
print(flow.response.text)
print(flow.response.content)
print(flow.response.json())
print(flow.response.headers)
# 修改响应体
# flow.response.text='''{"returncode":2040007,"message":"错了"}'''
# mitmdump -s mitmproxy.py
# mitmdump -s mitmproxy.py -q # 不输出日志
补充
如果有任何需求主页或者绿泡泡私信我,看我名字,有求必应