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. Burpsuite 工具详解(常用模块之proxy、spider 、decoder)

    Burpsuite常用模块之proxy.spider .decoder                                                 是一款集成化渗透测试工具(jav ...

  2. 13. 为什么我们会需要 Pod?

    13. 为什么我们会需要 Pod? 13.1 docker容器的本质 """ docker容器的本质 是进程. 主要通过 Namespace 做隔离,Cgroups 做限 ...

  3. webpack-bundle-analyzer插件的使用方式

    第一步: npm install --save-dev webpack-bundle-analyzer 第二步: 在build/webpack.prod.config.js中的module.expor ...

  4. Mac夜神模拟器99%无法正常使用

    PS:部分因更新OS X导致的卡99%可以尝试更新VBOX来解决此问题. 下载VBOX地址:https://www.virtualbox.org/wiki/Downloads         选择对应 ...

  5. Pandas——数据处理对象

    Pandas中的数据结构 Series: 一维数组,类似于Python中的基本数据结构list,区别是Series只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率.就像数据库中的列数据 ...

  6. 免费的私人代码托管(bitbucket) 和 常用git指令

    转自 http://blog.csdn.net/nzing/article/details/24452475 今天想找个免费的私人代码托管平台,github,googlecode, SourceFor ...

  7. vue 和 jquery混合使用

    有时候只要想到要用的 vue.js 的时候就会惯性的想起用vue-cli手脚架搭建一个项目,但是有时候的业务场景并不适合用vue-cli手脚架,这个时候使用vue+jquery混合使用,把他们的优点结 ...

  8. Windows 安装python虚拟环境

    windows 安装pytho虚拟环境 方法一:virtualenv (1)使用pip安装virtualenv工具 pip install virtualenv (2)使用virtualenv创建虚拟 ...

  9. Java Web 前端资源文件的路径问题

    WEB-INF是Java Web应用的安全目录,在部署时用于存放class文件.项目用到的库(jar包).Java Web应用的配置文件web.xml. 浏览器不能访问此目录下的资源,比如在WEB-I ...

  10. java集合体系结构总结

    好,首先我们根据这张集合体系图来慢慢分析.大到顶层接口,小到具体实现类. 首先,我想说为什么要用集合?简单的说:数组长度固定,且是同种数据类型.不能满足需求.所以我们引入集合(容器)来存储任意数据类型 ...