登录 |  注册 |  繁體中文


mitmproxy安装使用教程

分类: 服务器相关 颜色:橙色 默认  字号: 阅读(1030) | 评论(0)

一、安装

1.1 安装mitmproxy

直接使用pip安装即可

pip install mitmproxy

pip本质上会一是安装mitmproxy库的相关代码,二是安装mitmproxy.exe,mitmdump.exe,mitmweb.exe三个可执行程序。

可执行程序被安装在$PYTHON_HOME/Scripts文件夹下,

1.2 安装证书

mitmproxy默认只能拦截http,想要拦截https那就需要安装证书。

http://mitm.it/ 下载并导入证书,(需要先启动mitmweb代理服务)

二、运行

要启动 mitmproxy 用 mitmproxymitmdumpmitmweb 这三个命令中的任意一个即可,这三个命令功能一致,且都可以加载自定义脚本,唯一的区别是交互界面的不同。 mitmproxy.exe并不支持windows

mitmproxy 命令启动后,会提供一个命令行界面,用户可以实时看到发生的请求,并通过命令过滤请求,查看请求数据。形如:

mitmweb 命令启动后,会提供一个 web 界面,用户可以实时看到发生的请求,并通过 GUI 交互来过滤请求,查看请求数据。形如:

mitmdump 命令启动后 没有界面,程序默默运行,所以 mitmdump 无法提供过滤请求、查看数据的功能,只能结合自定义脚本,默默工作。

由于 mitmproxy 命令的交互操作稍显繁杂且不支持 windows 系统,而我们主要的使用方式又是载入自定义脚本,并不需要交互,所以原则上说只需要 mitmdump 即可,但考虑到有交互界面可以更方便排查错误,所以这里以 mitmweb 命令为例。实际使用中可以根据情况选择任何一个命令。

启动 mitmproxy:

mitmweb

应当看到如下输出:

Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8080

mitmproxy 绑定了 *:8080 作为代理端口,并提供了一个 web 交互界面在 127.0.0.1:8081

现在可以测试一下代理

2.1 电脑启动代理

配置网络代理即可

2.3 手机配置代理

手机配置代理大同小异都在设置之中进行配置。比如我这里的路径是:

设置----无线和网络WLAN----长按wifi名----修改网络----显示高级选项----代理----手动---服务器主机名输入172.30.195.1(根据自己电脑ip修改)服务器端口输入8080----保存

 

2.4 代理效果查看

完成后在启动mitmdump.exe的代理窗口上即可看到手机发送的所有数据包。

 

三、python3使用mitmproxy

使用mitmproxy的根本目的是想要python能修改发送的数据包,及截获服务端返回的数据包。只是打印出所有发送的请求对我们的目的而言是没有什么用的。

python接触发送数据包的途径是在启动mitmdump启动时使用-s选项指定处理脚本,其中通过重写request方法处理请求数据包,通过重写response方法处理响应数据包。示例如下。

启动命令:

mitmdump.exe -s example_script.py

exampl_script.py内容:

from mitmproxy import ctx

# 所有发出的请求数据包都会被这个方法所处理
# 所谓的处理,我们这里只是打印一下一些项;当然可以修改这些项的值直接给这些项赋值即可
def request(flow):
    request = flow.request  # 获取请求对象
    info = ctx.log.info # 实例化输出类
    info(request.url) # 打印请求的url
    info(request.method)# 打印请求方法
    info(request.host)# 打印host头
    info(str(request.port)) # 打印请求端口
    info(str(request.headers))# 打印所有请求头部
    info(str(request.cookies))# 打印cookie头

# 所有服务器响应的数据包都会被这个方法处理
# 所谓的处理,我们这里只是打印一下一些项
def response(flow):
    response = flow.response # 获取响应对象
    info = ctx.log.info  # 实例化输出类
    info(str(response.status_code)) # 打印响应码
    info(str(response.headers))# 打印所有头部
    info(str(response.cookies)) # 打印cookie头部
    info(str(response.text))  # 打印响应报文内容


# 3.需求需要拒绝客户端请求,所以实现一个 http_connect 事件:
def http_connect(self, flow: mitmproxy.http.HTTPFlow):
    # 确认客户端是想访问 www.google.com
    if flow.request.host == "www.google.com":
        flow.response = http.HTTPResponse.make(404)  # 返回一个非 2xx 响应断开连接

 



上一篇:swoole 和 go 比较   下一篇:10分钟看懂Docker和K8S

姓 名: *
邮 箱:
内 容: *
验证码: 点击刷新 *   

回到顶部