首页 > 其他分享 >mitmproxy

mitmproxy

时间:2024-12-01 21:10:39浏览次数:11  
标签:http 证书 Python flow mitmproxy import

mitmproxy简介与使用说明

一、mitmproxy概述

mitmproxy是一款免费且开源的交互式代理工具,功能强大,支持HTTP、HTTPS、HTTP2、WebSockets以及TCP数据的拦截、查看、修改和重放操作。它提供了命令行(mitmproxy)、基于浏览器的图形界面(mitmweb)以及可用于备份等功能的mitmdump工具,尤其以其灵活的Python脚本扩展能力备受开发者青睐,适用于开发、测试、安全研究等诸多场景。

二、安装mitmproxy

  1. 依赖环境准备
  2. 安装mitmproxy
    • 在Linux系统(以Ubuntu为例),打开终端,执行命令sudo apt-get update更新软件包列表后,输入sudo apt-get install mitmproxy即可完成安装。
    • 也可通过pip安装,执行pip install mitmproxy,此方式适用于多种操作系统及Python环境。

三、配置环境变量(使用apt install 则无需配置环境变量)

设置环境变量可方便在任意终端位置调用mitmproxy相关命令。

  1. Linux系统
    • 编辑~/.bashrc文件(若是使用zsh,则编辑~/.zshrc文件),添加如下内容:
export PATH=$PATH:/usr/local/bin/mitmproxy  # 根据mitmproxy实际安装路径调整
  • 保存文件后,在终端执行source ~/.bashrczshsource ~/.zshrc)使环境变量生效。

四、证书下载与安装

  1. 生成证书
    • 首次运行mitmproxy(如执行mitmproxy --version命令),它会在~/.mitmproxy/目录下自动生成CA证书,名为mitmproxy-ca-cert.pem
    • 证书也可以通过启动mitm后访问 https://mitm.it/,下载证书
      如果提示 “If you can see this, traffic is not passing through mitmproxy.” 说明本机的代理还没有配置,需要第3步完成。

启动(以下3种都可以,根据需要)

mitmproxy -p 8888 (命令行模式,默认是8080)
mitmdump -p 8888 -w /tmp/dump.log (文件保存模式)
mitmweb -p 8888 (网页模式)

报错: /usr/bin/xdg-open: 882: w3m: not found
xdg-open: no method available for opening 'http://127.0.0.1:8081/'
解决: mitmweb需要浏览器支持,在浏览器支持模式下会打开 http://127.0.0.1:8081

  1. 安装证书到系统信任存储
    • 在基于Debian或Ubuntu的Linux系统中,执行以下操作将证书添加到系统信任列表:
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy-ca-cert.crt
sudo update-ca-certificates
  1. linux环境下启用代理

export http_proxy="http://127.0.0.1:8888"
export https_proxys="http://127.0.0.1:8888"

五、Java安装证书

由于Java有独立的证书信任存储(不默认使用系统的证书,通常为$JAVA_HOME/jre/lib/security/cacerts),需额外将mitmproxy的CA证书添加进去,以便Java应用能信任由mitmproxy签发的用于解密HTTPS流量的证书。

  1. 使用keytool命令(keytool位于$JAVA_HOME/bin/目录下),假设证书文件是mitmproxy-ca-cert.pem,执行:
keytool -import -alias mitmproxy -file mitmproxy-ca-cert.pem -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
  • 注意,这里storepass是证书存储的默认密码,Java默认通常为changeit,执行过程中按提示确认添加操作。
  • 在windows环境下是 %JAVA_HOME%

六、使用mitmproxy进行OkHttp代理访问

  1. 配置OkHttp客户端代码
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;

public class Main {
    public static void main(String[] args) {
        // 设置代理,假设mitmproxy运行在本地(127.0.0.1)端口8888
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888));
        OkHttpClient client = new OkHttpClient.Builder()
               .proxy(proxy)
               .build();
        Request request = new Request.Builder()
               .url("https://example.com")
               .build();
        try {
            Response response = client.newCall(request).execute();
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 因okhttp和httpclient 允许应用启用代理模式,因此,环境中的代理依然不被认可。
  2. 运行Java程序
    • 编译并运行上述Java代码,此时Java应用通过OkHttp发送的请求就会经过mitmproxy代理,mitmproxy可拦截、查看和分析请求与响应数据,辅助开发调试、安全检测等工作。
  • 注意,有可能有缓存,会发现启用了没生效,需要重启应用,防止因启动前访问过,增加session代理后出错,错误类似:not first session。
  • 因会经过mitmproxy在中间代理人来一层,整个响应会变慢且是python,仅适合测试开发用。

通过以上步骤,即可完成mitmproxy的安装、配置以及结合Java的OkHttp实现代理访问,充分利用其强大功能助力网络请求相关工作。

mitmproxy 的Script

mitmproxy是使用python代码写的,也支持加载应用自己写的python脚本,执行url过滤,整理写入。以下是一个使用 mitmproxy 进行网络请求拦截的 Python 脚本示例,它可以实现对特定 URL 的请求进行拦截,并对请求和响应进行一些简单的处理和分析:

import mitmproxy.http


def request(flow: mitmproxy.http.HTTPFlow):
    """
    处理请求的函数
    在请求发送到服务器之前被调用
    """
    # 检查请求的URL是否包含特定字符串,这里以"example.com"为例
    if "example.com" in flow.request.url:
        print(f"拦截到对 {flow.request.url} 的请求")
        # 可以在这里对请求进行修改,比如修改请求头
        flow.request.headers["User-Agent"] = "Modified User-Agent"


def response(flow: mitmproxy.http.HTTPFlow):
    """
    处理响应的函数
    在收到服务器响应之后被调用
    """
    if "example.com" in flow.request.url:
        print(f"收到来自 {flow.request.url} 的响应,状态码: {flow.response.status_code}")
        # 可以在这里对响应进行查看或修改,比如查看响应内容
        print(f"响应内容: {flow.response.text}")

mitmproxy -s intercept_script.py

这样就可以拦截一个 example.com的请求。

标签:http,证书,Python,flow,mitmproxy,import
From: https://www.cnblogs.com/DennyZhao/p/18580340

相关文章

  • 抓包工具之MitmProxy
    官方文档: https://mitmproxy.org/github:https://github.com/mitmproxy/mitmproxy缘起:之前使用过几个抓包工具,例如fiddler和charles,但是这些都是已经开发成品,不好进行二次开发,而mitm可以使用Python进行定制化开发,方便抓包获取数据 开始mitmproxy是一个支持HT......
  • 【mitmproxy】使用mitmproxy录制http流量并写入文件
    一、场景   就是想用python脚本录制相关请求流量,然后回放给服务 二、脚本importmitmproxyimportjsonclassHttpFlowRecorder:def__init__(self):self.traffic=[]defrequest(self,flow):request_info={"url":fl......
  • 【mitmproxy】使用mitmproxy录制grpc流量
    一、官网https://www.mitmproxy.org/ 二、文档https://docs.mitmproxy.org/stable/ 三、安装1、二进制 2、使用pip安装pipinstallmitmproxy三、启动服务端 四、测试1、使用代理发送客户端请求$http_proxy=http://127.0.0.1:8080pythonasync_greeter......
  • python中使用mitmproxy的http模块出错
    我有一个使用mitmproxyhttp函数的代码,它在这里惨败:defmain(stdscr):try:parser=argparse.ArgumentParser(description='NetSourNetworkAnalyzer')parser.add_argument('--proxy',action='store_true',help='EnableH......
  • 代理 mitmproxy Python非命令行启动 使用笔记(一)
    代理mitmproxyPython非命令行启动使用笔记(一)mitmproxyPython非命令行启动在进行APP应用操作时,难免会遇到抓包操作,于是我们这里使用mitmproxy来完成这能力目录mitmproxy简介mitmproxy常用的命令行启动mitmproxy非命令行脚本直接启动,两种方式简介mitmproxy是......
  • 代理 mitmproxy config.yaml 模板 使用笔记(二)
    代理mitmproxyconfig.yaml模板使用笔记(二)mitmproxyconfig.yaml模板使用mitmproxy可能需要用到config.yaml来批量配置参数目录config.yaml文件所在位置config.yaml配置模板文件位置配置文件默认读取路径:~/.mitmproxy/config.yaml,见配置项:confdir:'~/.mitmpro......
  • mitmproxy 抓包神器-6.如何在linux操作系统中安装
    前言常见的抓包工具有fiddler和charles,这些工具都是需要安装本地客户端,python版的抓包工具可以用mitmproxy。mitmproxy相比Charles、fiddler的优点在于,它可以命令行方式或脚本的方式启动服务,跨平台使用。Linux环境安装mitmproxy(man-in-the-middleattackproxy),中间人......
  • mitmproxy
    mitmproxy是一个代理工具(软件安装或Python模块安装),实现代理请求(拦截请求或修改请求)这里介绍python的模块使用这里强烈推荐这个安装第三方库的软件:链接:https://pan.baidu.com/s/1L56TY68VNrw54go8eTxjkg?pwd=pg22提取码:pg22pipinstallmitmproxy基本就没有报错了。启动启动mit......
  • 接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程
    Mitmproxy代理配置及接口加解密详细教程官方网站:EventHooks&API(mitmproxy.org)本节目录展示:文章目录Mitmproxy代理配置及接口加解密详细教程客户端下载安装证书mitmproxy代理ios设备启动服务ios设备配置代理使用web抓取代码过滤处理加解密字符替换字符串转二进制字符串转字节......
  • 代理工具 Mitmproxy(二)
    这一节教大家编写Mitmproxy自定义脚本,这才是Mitmproxy真正强大的在方。Mitmproxy官方给了很多例子:https://docs.mitmproxy.org/stable/addons-examples/我们演示一个简单的例子http-add-header.py,为每一个response中增一个数字,标明是当前是第几个请求。"""AddanHTTPhead......