Skip to content

Java版本的mitmproxy,对本地浏览器所有的Http(s)请求和响应进行拦截并「重制」;也可充当轻量级B/S版抓包软件;

Notifications You must be signed in to change notification settings

hudaming1/jmitm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Nov 8, 2022
ff1bc67 · Nov 8, 2022
Nov 7, 2020
Mar 29, 2022
Mar 29, 2022
Mar 29, 2022
Nov 8, 2022
Nov 8, 2022
Oct 21, 2022
Jul 28, 2020
Aug 26, 2020
Aug 10, 2020
Jul 29, 2020
Sep 26, 2021
Nov 17, 2021
Oct 13, 2020
Oct 29, 2020
Nov 14, 2020
Sep 26, 2021

Repository files navigation

概述

简单说就是你可以对自己浏览器的所有「请求」和「响应」进行拦截,并通过「Java代码方式」进行「重制」。 基于jmitm,你可以:

根据Request重制Request
例如将「wiredog.com」重定向到「localhost:8080」,等效于配置浏览器级别的host: wiredog.com 127.0.0.1:8080

// 将wiredog.com重定向到localhost:8080
proxy.add(new CatchRequest().eval(request -> {
    // 判断请求域名是wiredog.com
    return "wiredog.com".equals(request.host());
}).rebuildRequest(request -> {
    // 如果命中Request,则将请求实际转发到localhost:8080
    return request.header("Host", "localhost:8080");
}).mock());

根据Request重制Response
对百度首页注入一段JS代码(根据请求拦截响应报文,并追加一段代码)

proxy.add(new CatchRequest().eval(request -> {
    // 如果访问的是百度首页
    return "www.baidu.com".equals(request.host()) && "/".equals(request.uri());
}).rebuildResponse(response -> {
    // 如果命中百度首页,则将以下JS代码追加到网页HTML的末尾,通过查看浏览器网页源代码也会发现在末尾处多了一段JS
    // 注入的JS代码
    String json = "<!--add by wiretigher--><script type='text/javascript'>alert('Wiredog say hello');</script>";
    // 因为响应头是gzip进行压缩,因此无法直接将ASCII串追加到内容末尾,需要先将原响应报文解压,在将JS追加到末尾
    String outBody = new String(CodecFactory.create("gzip").decompress(response.body())) + json;
    // 解压后为了省事,就不再进行压缩
    return response.removeHeader("Content-Encoding").body(outBody.getBytes());
}).mock());

根据Request Mock Response
拦截百度首页Logo,不做真实转发,直接读取本地GoogleLogo文件作为Response,百度首页的Logo变为本地Google的图片

proxy.add(new CatchRequest().eval(request -> {
    // 如果域名是baidu,访问的图片是百度的Logo(第一个图片是PC上的,后两个路径是移动端的Logo)
    return "www.baidu.com".equals(request.host()) &&("/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png".equals(request.uri()) || "/img/flexible/logo/pc/result.png".equals(request.uri()) || "/img/flexible/logo/pc/result@2.png".equals(request.uri()));
}).mockResponse(httpRequest -> {
    // 如果命中请求,则不会将请求转发到百度服务器,而直接读取本地Google图片作为Response返回。
    HttpResponse response = new HttpResponse();
    byte[] googleLogo = readFile("/mock/google.png");
    return response.body(googleLogo).header("Content-Type", "image/gif");
}).mock());

根据Response重制Response
暂时No Case...

Quick Start

1.git clone https://github.com/hudaming1/wiredog.git
2.启动 WiredogServerRun.java (默认端口52007)
3.访问localhost:8080进入控制台
4.点击控制台单「Download Cert」按钮下载并安装CA(如果需要卸载,在证书库中搜索Wiredog删除即可)
🌟Mac系统导入后,还需要手动将CA进行授信。
5.访问HTTPS网页,当控制台显示出HTTPS请求时,即可对HTTP请求响应进行重制

其他

内置PostMan

请求重访功能:对于抓到的HTTP请求,在控制台中不仅可以查看请求和响应结果,也可以实时进行修改并进行再次发送,等效于实现集成Fillder和PostMan。
<补充示例>

About

Java版本的mitmproxy,对本地浏览器所有的Http(s)请求和响应进行拦截并「重制」;也可充当轻量级B/S版抓包软件;

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages