Python3自定义http/https请求拦截mitmproxy脚本实例
作者:天外归云 时间:2021-04-13 15:33:01
脚本内容
代码如下:
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
效果
来源:https://www.cnblogs.com/LanTianYou/p/9591022.html
标签:Python3,http,https,mitmproxy
0
投稿
猜你喜欢
set rs=server.CreateObject("adodb.recordset") 的中文详细说明
2011-03-06 11:21:00
asp无组件实现画简单图形的类
2004-06-17 13:30:00
ASP分页类(支持多风格变换)
2011-04-08 10:39:00
pjblog3相关日志功能(支持生成静态模式)
2008-11-20 13:41:00
Python在线和离线安装第三方库的方法
2023-08-24 19:37:11
php生成图片验证码的实例讲解
2023-09-11 21:36:29
asp连接mssql2005的代码
2011-03-29 11:11:00
微信支付的开发流程详解
2023-09-07 08:54:45
用Dreamweaver设计Wordpress留言板教程(一)
2010-03-17 15:44:00
怎样在SQL Server 2005中用证书加密数据
2009-01-04 14:11:00
用CSS实现柱状图(Bar Graph)的方法(二)—基于表格元素的柱状图
2008-05-26 13:23:00
pytorch 如何使用float64训练
2023-08-12 00:19:45
设计师的底线
2009-05-06 12:51:00
python和php哪个更适合写爬虫
2023-10-28 00:51:14
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2023-11-23 23:45:27
php.ini修改php上传文件大小限制的方法详解
2023-09-11 04:03:12
如何实现SQL Server的分页显示?
2010-05-18 18:36:00
JavaScript变量类型以及变量作用域详解
2023-08-12 08:50:17
php文章内容分页并生成相应的htm静态页面代码
2023-07-23 23:48:20
详解MySQL 数据库优化方法
2010-08-12 14:50:00