一.简介

mitmproxy是一款用Python编写的支持HTTP(S)的中间人代理工具。它可以拦截、查看、修改、重放和保存HTTP/HTTPS流量 ,支持命令行界面和图形界面,可用于安全测试、网络调试、API开发和反向工程等场景。mitmproxy具有很高的灵活性和扩展性,可以通过插件机制进行定制化开发和功能扩展。本文注意介绍命令行模式。

二.环境配置及启动

1.安装mitmproxy库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mitmproxy  # pip install mitmproxy

2.安装成功后查看版本

mitmdump  --version

若提示报错:ImportError: cannot import name 'soft_unicode' from 'markupsafe',大概意思是说markupsafe版本过低,但是通过pip show  markupsafe查看后发现版本是2.1.2的。后来查看资料才发现这个版本的markupsafe不能用,没办法,只能卸载重新安装2.0.1的了。

卸载:pip uninstall markupsafe
安装:pip install -i  https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host pypi.tuna.tsinghua.edu.cn  markupsafe==2.0.1

安装的过程一定要加:--trusted-host pypi.tuna.tsinghua.edu.cn(下载的镜像),大概意思就是信任该下载地址。完了之后再次输入mitmdump  --version就可以了。

3.启动mitmproxy

mitmproxy启动命令有三种,分别是mitmproxy,mitmweb,mitmdump。由于win不支持mitmproxy,所以本次只介绍后两者的用法。

1)mitmdump

mitmdump是在终端打印抓包信息,我们在终端直接输入mitmdump就可以启动了。

 下面是mitmdump的一些参数,有兴趣的可以研究看看。

-h,--help:显示帮助信息-v,--version:显示版本信息-q,--quiet:静默模式,只输出警告和错误信息-s,--scripts:指定JavaScript脚本文件路径-r,--readfile:从文件中读取流量-w,--writefile:将流量写入文件-p,--listen-port:指定监听端口-P,--http-proxy:指定HTTP代理地址-U,--upstream-proxy:指定上游代理地址--ssl-insecure:禁用SSL验证--anticomp:禁用自动解压缩--no-http2:禁用HTTP/2协议--no-websocket:禁用WebSocket协议--no-anticache:禁用自动缓存--no-server-replay:禁用服务器回放模式--set:设置mitmproxy配置项,格式为key=value--showhost:显示主机名

2)mitmweb

mitmweb是将抓包信息显示在web页,在终端输入mitmweb后会自动打开浏览器进行抓包,也可以在浏览器中直接输入地址:http://127.0.0.1:8081/#/flows

mitmweb常用参数。

-h,--help:显示帮助信息;-b,--listen-host:指定mitmweb监听的IP地址;-p,--listen-port:指定mitmweb监听的端口号;--web-host:指定mitmweb UI的IP地址;--web-port:指定mitmweb UI的端口号;-s,--scripts:指定mitmweb运行的脚本文件;--anticache:启用anti-caching;--anticomp:启用anti-compression;--anticomp-decoding:启用anti-compression解码;--client-certs:指定客户端证书文件路径;--no-web-open-browser:启动mitmweb时不自动打开浏览器;--no-web-socket:禁用WebSocket协议;--no-http2:禁用HTTP/2协议;--no-web:禁用mitmweb UI。

三.抓包配置

1.web

1)在终端启动mitmproxy后,我们打开电脑本地代理(win键>更改代理设置>开启使用代理服务器),端口要与启动mitmproxy一致8080。

 启动完本地服务器代理后其实我们就可以看见抓包信息了,不过全是报错信息,因为浏览器还没有安装证书。

 2)在浏览器输入:http://mitm.it/ 下载win证书

 下载完成后直接安装即可。直接傻瓜式安装,需要注意的是将证书安装到下图存储中

 3)安装完证书后发现还是没法抓包,浏览器会提示不是私密连接,这个时候我们打开dos窗口,输入以下内容。

"C:\Program Files (x86)\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors

输入完点击回车后会自动打开浏览器,此时不必理睬就行,在终端执行ctrl+c键关闭mitmproxy服务后重新开启,便可以正常抓包了。

2.Android

1)终端启动mitmproxy服务

2)dos窗口输入ipconfig/all,查看本地IPv4代理。

 3)手机与电脑连接同一个局域网,开启手动代理后输入以上ip,端口为8080。

4)打开手机浏览器输入:http://mitm.it/ 下载安装Android证书,完了之后就可以正常抓包了

3.ios

与Android步骤一致,多了步证书信任,可参考:https://www.cnblogs.com/lihongtaoya/p/15196393.html

四.python代码实现

不做多余解释了直接贴代码

from mitmproxy import http


def request(flow: http.HTTPFlow):
    request_list = flow.request  # 获取请求对象
    print(request_list.method, request_list.host)


def response(flow: http.HTTPFlow):
    responses_list = flow.response  # 获取响应对象
    print(responses_list.text, responses_list.status_code)

在获取到请求和响应对象后,用对象名可直接调用自己需要的属性

 编写完python代码后再终端启动mitmproxy并指定脚本文件,就可以看见打印的接口信息了

mitmweb  -s  ./lianxi/mitmproxy.py

 

作者:|余生没有余生|,原文链接: https://www.cnblogs.com/lihongtaoya/p/17446958.html

文章推荐

如何通过Java代码将 PDF文档转为 HTML格式

聊一聊redis十种数据类型及底层原理

Redis - 数据类型映射底层结构

JDK8到JDK17有哪些吸引人的新特性?

CentOS7---部署Tomcat和安装Jpress

Springboot集成MongoDB存储文件、读取文件

Vue2依赖收集原理

一文搞懂原型和原型链

Docker-web项目部署

Linux Bash Shell 中变量的 5 个易错点

Java 线程创建与常用方法

MySQL的Explain总结