• mitmproxy 可以抓到非浏览器发起的请求,(很多别的抓包工具也可以,但是我平时图省事是只用浏览器开发者工具的)
  • mitmproxy 能直接将抓到的http请求包引入到 python中 进行编辑,比如可以自己撰写脚本,将抓到的包直接构造 requests 或者 scrapy.Requests 对象,或者将抓到的包,按请求顺序一次保存在队列中,再通过 requests 类封装,便于以后爬虫开发。

mitmproxy 安装

我是直接通过python pip 安装的

pip install mitmproxy

安装过程中遇到了 ruamel-yaml 的问题:

Pip subprocess error:
ERROR: Cannot uninstall 'ruamel-yaml'. It is a distutils installed project and thus we cannot
accurately determine which files belong to it which would lead to only a partial uninstall.

经过一番Google,找到解决方案:直接在 anaconda 中删除 ruamel 相关的文件即可:

windows 路径 anaconda/Lib/site-packages/ruamel*

Linux 路径 anaconda3/lib/python3.8/site-packages/ruamel*

mitmproxy 的使用

mitmproxy 安装以后提供了三个执行程序:mitmproxy, mitmdump, mitmweb,直接在控制台输入即可。

mitmproxy 提供了 shell 交互式的抓包界面,但是只能在 Linux 环境中使用

mitmdump 后台抓包,

mitmweb 会在默认浏览器打开一个抓包可视化的界面,

我自己常用的参数:

-w 指定输出的文件

-s 指定抓包时执行的脚本

开启抓包代理以后,浏览器打开链接 http://mitm.it/ ,安装SSL证书,便于抓取 HTTPS 。

使用 mitmproxy 抓包时,发现很多请求会返回 413 错误,找到解决方案是抓包时候,添加 --set http2=false 参数,即:

mitmweb.exe -s .\gid.py --set http2=false

mitmproxy 脚本

我个人基本上用这些就够了,不同的函数对应了HTTP请求的不同阶段,脚本会在请求对应的阶段执行对应的函数,可以通过这些函数对请求进行更改,

import mitmproxy.http
import pickle
import os
import jsonclass GetSeq:def __init__(self, domains=[], url_pattern=None, ):self.num = 1self.dirpath = "./flows/"if not os.path.exists(self.dirpath):os.mkdir(self.dirpath)self.domains = domainsself.url_pattern = url_patterndef http_connect(self, flow: mitmproxy.http.HTTPFlow):"""An HTTP CONNECT request was received. Setting a non 2xx response onthe flow will return the response to the client abort theconnection. CONNECT requests and responses do not generate the usualHTTP handler events. CONNECT requests are only valid in regular andupstream proxy modes."""def requestheaders(self, flow: mitmproxy.http.HTTPFlow):"""HTTP request headers were successfully read. At this point, the bodyis empty."""def request(self, flow: mitmproxy.http.HTTPFlow):"""The full HTTP request has been read."""def responseheaders(self, flow: mitmproxy.http.HTTPFlow):"""HTTP response headers were successfully read. At this point, the bodyis empty."""def response(self, flow: mitmproxy.http.HTTPFlow):"""The full HTTP response has been read."""# 自行更改这里的保存代码,此处仅供参考def save_flow():fname = "{}flow-{:0>3d}-{}.pkl".format(self.dirpath, self.num, flow.request.host)pickle.dump({"num": self.num,"request": flow.request,"response": flow.response}, open(fname, "wb"))log_data = dict(num = self.num,url = flow.request.url,fname = fname)with open("flow_que.log", "a+", encoding="utf8") as f:s = json.dumps(log_data)f.write(s)self.num += 1# 添加自己的过滤需求if flow.request.headers.get('content-type', None) == "application/json":save_flow()if len(self.domains) == 0: save_flow()for domain in self.domains:if domain in flow.request.url:save_flow()def error(self, flow: mitmproxy.http.HTTPFlow):"""An HTTP error has occurred, e.g. invalid server responses, orinterrupted connections. This is distinct from a valid server HTTPerror response, which is simply a response with an HTTP error code."""addons = [GetSeq(domains=["baidu.com",],url_pattern = None,)
]

mitmproxy 安装,使用,抓取 HTTPS,以及python脚本编写相关推荐

  1. burpSuite之安装+配置代理+安装证书抓取https

    1.安装用的破解版,解压直接可以用 2.打开BurpSutie配置代理 使用默认的127.0.0.1:8080就好 编辑完记得Running打勾✔ 3.配置浏览器代理安装证书 对火狐浏览器配置代理及安 ...

  2. 如何用fiddler抓取HTTPS的详细教程(附fiddler安装教学)

    对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler,可是在初学时,大家对于fiddler如何抓取HTTPS真是伤了脑筋,可能你一步步按着网上的帖子成功了,那当然是极好的,有可能没有成功 ...

  3. Fiddler无法抓取HTTPS的问题,Fiddler证书无法安装终极解决方案,

    Fiddler无法抓取HTTPS的问题,Fiddler证书无法安装终极解决方案, 参考文章: (1)Fiddler无法抓取HTTPS的问题,Fiddler证书无法安装终极解决方案, (2)https: ...

  4. android 监听本机网络请求_fiddler如何抓取https请求实现fiddler手机抓包-证书安装失败100%解决...

    一.HTTP协议和HTTPS协议. (1) HTTPS协议=HTTP协议+SSL协议,默认端口:443 (2) HTTP协议(HyperText Transfer Protocol):超文本传输协议. ...

  5. App逆向——安卓7以上如何安装抓取https的包

    安卓7以上如何抓取https的包 1.从抓包软件中导出证书 以burpsuite为例,访问http://burp,导出证书即可 2.通过openssl处理pem证书 >>>opens ...

  6. 【教程】小米手机Android 7.0+抓取HTTPS请求安装Charles证书主要流程

    以下教程可能耗费你数小时时间,请注意时间. 目标:抓取HTTPS的包 如果你的手机是在Android 7.0+及其以上,想要抓取HTTPS的请求,必须要将证书(*.pem)用系统用户的权限安装,即把这 ...

  7. Charles安装后无法抓取https请求,显示 unknow

    问题描述 安装Charles后,双击打开,尝试抓取https请求,但抓取到的请求显示unknow,如下图: 问题原因 出现此问题的原因为Charles配置问题 解决办法 一. 安装证书 步骤: 1.点 ...

  8. 小米Android系统限制联网,Android 7 以上版本,绕过CA限制,抓取https

    环境 手机:小米5A 系统:MIUI 10 电脑:win10 抓包:mitmdump (可替换成其他抓包软件) 电脑需要安装: mitmdump(可替换成任意抓包软件) adb openssl 背景 ...

  9. Fiddler抓取HTTPS最全(强)攻略!

    对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler. 但是初学时,大家对于fiddler如何抓取HTTPS难免走歪路,也许你一步步按着网上的帖子成功了,这自然是极好的. 但也有可能没那 ...

最新文章

  1. c#执行oracle存储过程,C#中如何执行存储过程方法
  2. Spark源码阅读02-Spark核心原理之消息通信原理
  3. 筑业和恒智天成哪个好_浙江新闻客户端:废弃物变身创意作品 天成小学垃圾分类工作有声有色...
  4. 京东JIMI用户未来意图预测技术揭秘
  5. matlab中结束脚本运行_疫情当前,生活向前 | MATLAB 一直 Online 等你
  6. [Spring5]IOC容器_Bean管理注解方式_注入属性@Autowired_@Qualified_@Resource_@Value
  7. 前端学习(2181):vue-router导航守卫的补充
  8. 个别学生计算机辅导计划,网络学院计算机基础统考辅导计划.doc
  9. 鸿蒙系统无限延期,鸿蒙系统下月到来,三款手机首批升级,华为P50系列延期发布!...
  10. 使用Echarts制作散点图(Excel导入数据方式)
  11. Helm 3 完整教程(六):在模板中使用 Helm 函数
  12. Android 如何才能捕获系统的恢复出厂设置事件
  13. 模拟文件管理器的java可以编译但无法运行_在java学习经典问题he解答(6)
  14. 中国最惨创业者的惨痛教训!
  15. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
  16. PLSQL14下载与安装及使用
  17. 1G PHP免费空间
  18. 2021-06-13
  19. 语音信号处理-概念(一):时域信号(横轴:时间;纵轴:幅值)、频谱图(横轴:频率;纵轴:幅值)--傅里叶变换-->时频谱图(语谱图/声谱图)【横轴:时间;纵轴:频率;颜色深浅:幅值】
  20. 中轴型SpA的两种诊断分支具有可比性

热门文章

  1. 二道波哥-五分钟带你了解好省
  2. Linux 查看端口常用命令
  3. vb.net datetimepicker上个月到现在的天数_二手车商库存管理的四大段位,你现在处在哪个段位?...
  4. html5 导航栏颜色怎么修改
  5. win7加入win2003域
  6. Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据
  7. python浮点数输出格式_python常见的格式化输出小结
  8. 用git下载代码很慢的问题解决
  9. Python 八进制转换为十进制代码
  10. 漫画|如果恶魔给你一亿,一年之后必须还两个亿,你会接受吗?