mitmproxy 配置

mitmproxy源码:https://github.com/mitmproxy/mitmproxy

mitmdump

  • -q:屏蔽mitmdump默认的控制台日志,只显示自己脚本中的
  • -s:入口脚本文件
  • -p:更改端口,默认为8080
  • 修改脚本文件时,不用重启也会生效

针对 HTTP 生命周期的事件

  • 请求:def request(self, flow: mitmproxy.http.HTTPFlow):
  • 响应:def response(self, flow: mitmproxy.http.HTTPFlow):
  • 其它:
    • def http_connect(self, flow: mitmproxy.http.HTTPFlow):
    • def requestheaders(self, flow: mitmproxy.http.HTTPFlow):
    • def responseheaders(self, flow: mitmproxy.http.HTTPFlow):
    • def error(self, flow: mitmproxy.http.HTTPFlow):

请求:def request(flow:flow)

  • flow.request.headers

    • 获取所有头信息,包含Host、User-Agent、Content-type等字段
  • flow.request.url
    • 完整的请求地址,包含域名及请求参数,但是不包含放在body里面的请求参数
  • flow.request.host
    • 域名
  • flow.request.method
    • 请求方式:POST、GET等
  • flow.request.scheme
    • 请求类型:http、https
  • flow.request.path
    • 请求的路径,URL除域名之外的内容
  • flow.request.get_text()
    • 请求中body的内容,有一些http会把请求参数放在body里面,可通过此方法获取,返回字典类型
  • flow.request.get_content()
    • 结果如flow.request.get_text(),返回bytes类型
  • flow.request.raw_content
    • 结果如flow.request.get_content(),返回bytes类型
  • flow.request.urlencoded_form
    • MultiDictView,content-type:application/x-www-form-urlencoded的请求参数,不包含url直接带的键值参数
  • flow.request.multipart_form
    • MultiDictView,content-type:multipart/form-data
  • flow.request.query
    • 返回MultiDictView类型的数据,URL的键值参数
    • flow.request.query.get('wd')
      • 取得请求参数wd的值
    • flow.request.query.keys()
      • 取得所有请求参数
    • flow.request.query.set_all(key,[value])
      • 修改请求参数
from mitmproxy.http import flow

def request(flow:flow):
# 获取所有头信息,包含Host、User-Agent、Content-type等字段
# print(flow.request.headers) # 域名
# print(flow.request.host) # 请求方式:POST、GET等
# print(flow.request.method) # 请求类型:http、https
# print(flow.request.scheme) # 请求的路径,URL除域名之外的内容
# print(flow.request.path) # 请求中body的内容,有一些http会把请求参数放在body里面,可通过此方法获取,返回字典类型
# print(flow.request.get_text()) # 返回MultiDictView类型的数据,URL的键值参数
# print(flow.request.query) # 完整的请求地址,包含域名及请求参数,但是不包含放在body里面的请求参数
if 'https://www.baidu.com' in flow.request.url:
# 取得请求参数wd的值
# print(flow.request.query.get('wd')) # 取得所有请求参数
print(list(flow.request.query.keys())) # 修改请求参数
flow.request.query.set_all('wd',['python'])
# 打印修改过后的参数
print(flow.request.query.get('wd'))

响应:def response(flow: flow)

  • flow.response.status_code

    • 状态码
  • flow.response.text
    • 返回内容,已解码
  • flow.response.content
    • 返回内容,Bytes类型
  • flow.response.get_text()
    • 取得响应的文本
  • flow.response.set_text()
    • 修改响应的文本
  • flow.response = flow.response.make(404)
    • 返回404
from mitmproxy.http import flow
import json
import re def response(flow: flow):
# 状态码
# print(flow.response.status_code) # 返回内容,已解码
# print(flow.response.text) # 返回内容,Bytes类型
# print(flow.response.content) # 取得响应的文本
# print(flow.response.get_text()) # 修改响应的文本
# flow.response.set_text('123') # 返回404
# flow.response = flow.response.make(404) # 修改淘宝对selenium的js检测文件
targetUrl = 'https://g.alicdn.com/AWSC/uab/122.js'
if targetUrl in flow.request.url:
taobao_js =flow.response.get_text()
taobao_js = taobao_js.replace('!function(){function','!function (){Object.defineProperties(navigator,{webdriver: {get: () => false}})function')
flow.response.set_text(taobao_js)
print('已修改') # 淘宝搜索商品时,自动打印商品信息
if 'https://s.taobao.com/search' in flow.request.url:
start = flow.response.text.strip().index('{')
end = -2
print(json.loads(flow.response.text.strip()[start: end])['mods']['itemlist']['data']['auctions']) # 空气质量网,修改检测F12的JS
# https://www.aqistudy.cn/historydata
if 'https://www.aqistudy.cn/historydata/monthdata.php' in flow.request.url:
js = flow.response.text
js = re.sub(r'endebug.*?}\);','',js,flags=re.S)
flow.response.set_text(js)
print('已正常')

拦截指定数据、修改JS -- mitmproxy的更多相关文章

  1. Fiddler拦截http请求修改数据

    1.拦截http请求 使用Fiddler进行HTTP断点调试是fiddler一强大和实用的工具之一.通过设置断点,Fiddler可以做到: ①修改HTTP请求头信息.例如修改请求头的UA,Cookie ...

  2. Fiddler -工具使用介绍(附:拦截请求并修改返回数据)(转)

    一.Fiddler 介绍 Fiddler 是一个使用 C# 编写的 http 抓包工具.它使用灵活,功能强大,支持众多的 http 调试任务,是 web.移动应用的开发调试利器. 1,功能特点 同 H ...

  3. 用Java代码实现拦截区域网数据包

    起因: 吃饭的时间在想如果区域网内都是通过路由器上网,那如何实现拦截整个区域网的数据包,从而实现某种窥探欲. 思路:      正常是通过电脑网卡预先设置或分配的IP+网关对路由器进行通讯,比如访问百 ...

  4. 你真的会玩SQL吗?简单的数据修改

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  5. 利用Chrome插件向指定页面植入js,劫持 XSS

    资源来自:http://www.2cto.com/Article/201307/225986.html 首页 > 安全 > 网站安全 > 正文 利用Chrome插件向指定页面植入js ...

  6. Django:之传递数据给JS、Ajax和Ajax CSRF认证

    Django传递数据给JS 有时候我们想把一个list或者dict传递给javascript,处理后显示到网页上,比如要用js进行可视化到数据. 请注意:如果是不处理,直接显示在网页上,用Django ...

  7. 本地修改js代码并时时生效的解决办法

    js作为客户端语言(当然它也可以作服务端语言),非常强悍,一般情况下,我们都是在开发阶段不停的改,然后上线之后就作为稳定运行的代码. 然而有时候可能因为js写得有问题,导致上线后,某些功能无法使用,这 ...

  8. DataTable数据修改,换列

    增加列             DataTable table= new DataTable();             table.Columns.Add("ID", type ...

  9. Oracle中使用游标获取指定数据表的所有字段名对应的字符串

    操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR( ...

随机推荐

  1. Spring Boot JDBC 使用教程

    总是要用到数据库的嘛,曾经我一度以为,写代码,编程就是搞数据库增删改查,甚至你设计一个系统,大部分时候在为如何设计关系型数据库努力,究其原因,是因为关系型数据库是逻辑的主要呈现. 这个系列,主要是对 ...

  2. JQuery常用CSS操作

    JQuery常用CSS操作 $(elem).css(obj):设置行内样式 $(elem).position():返回相对于父容器位置,只能获取不能设置 $(elem).offset(obj):返回相 ...

  3. PostgreSQL数据库-分页sql--offset

    select * from users order by score desc limit 3;--取成绩的前3名=====select * from users order by score des ...

  4. Python学习笔记010

    倒三角 num2 = int(input("Line:")) while num2 > 0:    num1 = num2    while num1 > 0:     ...

  5. ➡️➡️➡️IELTS reading by Simon on Bili

    高分必备 雅思考官Simon手把手教你做阅读 p1 https://www.bilibili.com/video/av40131278?p=2 p2 https://www.bilibili.com/ ...

  6. [ DLPytorch ] 批量归一化与残差网络

    批量归一化 通常来说,数据标准化预处理对于浅层模型就足够有效了.随着模型训练的进行,当每层中参数更新时,靠近输出层的输出较难出现剧烈变化.但对深层神经网络来说,即使输入数据已做标准化,训练中模型参数的 ...

  7. Day11 - F - A Dangerous Maze LightOJ - 1027

    求期望注意期望的定义,这题我们可以分正负数情况,设所求期望为E 正数: 1/n*x_i 负数:1/n*(E+x_j) 此时概率为1/n,根据期望定义,他回到起点后出去的期望为E,花费回起点的时间为x_ ...

  8. mysql之内连接,外连接(左连接,右连接),union,union all的区别

    内连接,外连接,左连接,右连接,全连接 测试数据: CREATE TABLE `a_table` ( `a_id` int(11) DEFAULT NULL, `a_name` varchar(10) ...

  9. git github 对代码的管理

    参考:https://www.cnblogs.com/feynman61/p/9005252.html 一.Git 对远程仓库版本回退 场景: 同事 a.b 同时修改了代码,提交到仓库 同时 c 不熟 ...

  10. 如何启动mac版docker自带的k8s

    最近准备好好学习下k8s,为了图方便,直接使用docker集成的k8s,但是网上找了一些教程但都没能一次性成功,只好自己从头跑一遍,顺手写个教程可以方便有类似需求的同学参考. 话不多说,直接上步骤. ...