【mitmproxy 用法】

网友投稿 1174 2022-09-29

【mitmproxy 用法】

【mitmproxy 用法】

简介

​​mitmproxy​​​是一组工具,可为​​HTTP/1​​​,​​HTTP/2​​​和​​WebSockets​​​提供交互式的,具有​​SSL/TLS​​​功能的拦截代理(可以对Web、Mobile进行抓包)。​​​mitmproxy​​​ 相比​​Charles​​​、​​fiddler​​​的优点在于它可以命令行方式或脚本的方式进行​​mock​​​数据,还可以对请求数据进行二次开发,进入高度二次定制。 详情可参考:​​​mitmproxy 官网​​​ 和 ​​mitmproxy 官方文档​​

安装

Mac 安装

直接命令行安装:​​brew install mitmproxy​​

或者直接-二进制文件进行安装 ​​mitmproxy.org​​

Windows 安装

直接-​​exe​​​文件进行安装 ​​mitmproxy.org​​

安装好后查看是否配置成功:​​mitmproxy --version​​

安装证书

安装证书之前首先要启动​​mitmproxy​​​: ​​mitmproxy -p 8899​​

浏览器代理配置

Chrome 已安装插件(没有VPN可能安装不了,推荐使用Firefox) ​​Proxy SwitchyOmega​​

Firefox 已经安装插件 ​​Proxy SwitchyOmega​​

添加新的代理(端口要与上边的启动的端口一致):

配置后的浏览器打开​​mitm.it​​​,根据提示安装相对应的证书并且​​要信任证书​​

用法

​​mitmproxy​​工具有以下三部分组成:

​​mitmproxy​​​是具有​​SSL/TLS​​​功能的交互式拦截侦听代理,具有用于​​HTTP/1​​​,​​HTTP/2​​​和​​WebSockets​​​的控制台界面。​​​mitmweb​​​是用于​​mitmproxy​​​的基于​​Web​​​的界面。​​​mitmdump​​​是​​mitmproxy​​​的命令行版本。将​​tcpdump​​​用于​​HTTP​​。

常用参数 -h 帮助信息 -p 修改监听端口,默认监听端口8080 -s 加载 python 脚本

mitmproxy

mitmproxy是一个控制台工具,它允许交互式检查和修改HTTP流量

启动代理:​​mitmproxy -p 8899​​

通过​​q​​返回到主界面,可通过​​f​​添加过滤条件,最后可以通过​​q​​关掉代理,详情操作可参考: ​​doc​​

mitmweb

​​mitmweb​​​是​​mitmproxy​​基于Web的用户界面

启动代理:​​mitmweb -p 8899​​

具体功能根据页面自己摸索吧!

mitmdump

mitmdump是mitmproxy的命令行伴侣。它提供了类似tcpdump的功能,可让您查看,记录和以编程方式转换HTTP流量,即可对接 python 对请求进行处理,因此就不用手动截获和分析 请求和响应,只需要写好请求和响应的处理逻辑即可。请参阅–help标志输出以获取完整的文档。

录制与回放

录制:​​mitmdump -w 文件名​​​ 过滤:​​mitmdump -nr 文件名 -w 文件名2 "~s chenshifeng"​​ 回放:​​mitmdump -nc 文件名​​

参数

​​-s test.py # 加载脚本​​​​-n 不启动代理​​​​-r 读取文件内容​​​​-w 写入文件​​​​~s 过滤响应数据​​

详情可参考:​​mitmdump -h​​

录制请求数据并保存到​​result.txt​​​文件:​​mitmdump -p 8999 -w result.txt​​

过滤保存的请求: ​​mitmdump -nr result.txt -w filter_result.txt "~s kewords" ​​

​​mitmdump 加载脚本拦截更改请求信息​​

例1:脚本(​​update_request.py​​​)更改​​response code​​​和​​response text​​

from mitmproxy import jsondef response(flow: # flow.request.pretty_url,整个url if flow.request.path == '你要拦截的url的path': # flow.response.text = json.dumps(results) flow.response.text = json.dumps([]) flow.response.status_code = 500

启动:​​mitmdump -p 8899 -s update_request.py​​

例2: 脚本(​​update.py​​)修改返回特定的内容

from mitmproxy import jsondef response(flow: # flow.request.pretty_url,整个url if flow.request.path == '你要拦截的url的path': data = json.loads(flow.response.content) # update data data['key1']['key2'][0] = "some thing" flow.response.text = json.dumps(data)

例3:脚本(test.py)构造请求,拦截一个请求并调用你构造的请求

from mitmproxy import def request(flow: if flow.request.path == '你要拦截的url的path': # 修改请求头 flow.request.headers["my_headers"] = "headers" print(flow.request.headers) # 更新请求的path flow.request.path = '要更改的path' # 构造请求的body body = { "key": "", "key1": "123" } flow.request.content = json.dumps(body).encode('ascii') # 构造请求的method flow.request.method = b'PUT'

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:手把手教你在小程序中怎么实现悬浮按钮(代码示例)(小程序悬浮按钮滑动隐藏)
下一篇:微信小程序中如何实现子向父传参(页面通信)(小程序父子组件传参)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~