脚本内容
代码如下:
from mitmproxy import http, ctx from multiprocessing import Lock class Filter: def __init__(self, filter_info): self.log_info = "" self.mutex = Lock() self.filter_info = filter_info self.response_file = None self.switch_on = False self.log_file = "log.txt" def log(self, info) -> None: self.log_info += f"{info}\n\n" def write_log(self, mode="w+") -> None: self.mutex.acquire() with open(self.log_file, mode) as f: f.write(self.log_info) self.mutex.release() def is_target_flow(self, flow: http.HTTPFlow) -> bool: for info in self.filter_info: if info["str_in_url"] in flow.request.url: self.log_file = info["log_file"] self.switch_on = info["switch_on"] if info["response_file"] != None: self.response_file = info["response_file"] return True else: return False def modify_response(self, flow: http.HTTPFlow) -> http.HTTPFlow: if self.switch_on and self.response_file: with open(self.response_file, "r") as f: flow.response.content = f.read().encode() return flow def request(self, flow: http.HTTPFlow) -> None: if self.is_target_flow(flow): self.log_info = "" self.log(f"——METHOD——\n{flow.request.method}") self.log(f"——HOST——\n{flow.request.pretty_host}") self.log(f"——URL——\n{flow.request.pretty_url}") query = [i + ":" + flow.request.query[i] + "\n" for i in flow.request.query] self.log(f"——QUERY STRING——\n{''.join(query)}") if flow.request.urlencoded_form: form = [i + ":" + flow.request.urlencoded_form[i] + "\n" for i in flow.request.urlencoded_form] self.log(f"——FORM——\n{''.join(form)}") self.write_log() def response(self, flow: http.HTTPFlow) -> None: if self.is_target_flow(flow): self.log_info = "" self.log(f"——RESPONSE before modified——\n{flow.response.content.decode()}") flow = self.modify_response(flow) self.log(f"——RESPONSE after modified——\n{flow.response.content.decode()}") self.write_log(mode="a") filter_info = [ { "str_in_url": "getSimpleNews", "log_file": "getSimpleNews_log.txt", "switch_on": True, "response_file": "getSimpleNews_response.txt", }, { "str_in_url": "getQQNewsComment", "log_file": "getQQNewsComment_log.txt", "switch_on": True, "response_file": None, } ] addons = [ Filter(filter_info) ]
使用方法
运行mitmproxy指定使用该脚本和端口号即可:
mitmproxy -p 6666 -s xxx.py
在mitmproxy运行时:
1. 会拦截url中包含str_in_url字符串的请求
2. 会把response.content修改为当前mitm运行所在目录下的response_file文件中的内容
3. 打印信息在当前mitm运行所在目录下的log_file文件中
4. 如果无需修改response设置switch_on为False即为开关关闭
5. 如果不修改response的话response_file需要写None
补充知识:mitmproxy 监听指定端口
安装
使用python3的安装方式
https://mitmproxy.org/
监听指定端口
例子:Presto SQL请求的监听
Presto地址:http://datacenter4:18080
mitmproxy命令(端口8484)
mitmproxy \
--mode reverse:http://datacenter4:18080 \
--listen-host datacenter4 \
--listen-port 8484 \
--replacements :~s:\/\/datacenter4/:\/\/datacenter4:18080/
然后JDBC访问Presto使用:jdbc:presto://datacenter4:8484
效果
以上这篇Python3自定义http/https请求拦截mitmproxy脚本实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星.2003-存为爱2CD【环球】【WAV+CUE】
- 韩磊《试音天碟》高清音频[WAV+CUE]
- 邓涛《寂寞蒲公英(黑胶CD)》[WAV]
- 江志丰.2011-爱你的理由【豪记】【WAV+CUE
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[320K/MP3][140.01MB]
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[FLAC/分轨][293.29MB]
- 首首经典《滚石红人堂I 一人一首成名曲 4CD》[WAV+CUE][2.5G]
- s14上单t0梯度怎么排名 s14世界赛上单t0梯度排行榜
- tes目前进了几次s赛 LPL队伍tes参加全球总决赛次数总览
- 英雄联盟巅峰礼赠什么时候开始 2024巅峰礼赠活动时间介绍
- 冯骥发文谈睡觉重要性 网友打趣:求求你先做DLC
- 博主惊叹《少女前线2》万圣节大雷皮肤:这真能过审吗?
- 《生化危机8》夫人比基尼Mod再引骂战:夸张身材有错吗?
- 江蕙.1994-悲情歌声【点将】【WAV+CUE】
- 戴娆.2006-绽放【易柏文化】【WAV+CUE】