Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
martian — Martian是一个用于构建自定义HTTP/S代理的库 | Kitploit
工具/GitHubGitHub/google/martian
动态分析 (沙盒)Web代理与拦截API安全测试Web安全渗透测试实用工具与框架Archived
GitHubgoogle/martian

martian

Martian是一个用于构建自定义HTTP/S代理的库

查看仓库
2.0k25341年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Martian Proxy Build Status

Martian Proxy 是一个可编程的 HTTP 代理,专为测试而设计。

如果你想要:

  • 验证所有(或部分)请求是否安全
  • 在网络层模拟外部服务
  • 注入标头、修改 Cookie 或对 HTTP 请求和响应执行其他变更
  • 验证回传是否在你预期的时间发生
  • 解包加密流量(需在浏览器中安装 CA 证书)

那么 Martian 是一个很好的工具。

借助 Go 的交叉编译特性,Martian 可以部署在任何 Go 支持的目标平台上。

最新版本

v3.0.0

系统要求

Go 1.11

Go 模块支持

Martian Proxy 从 v3.0.0 开始支持 Go 模块。如果你使用的 Go 版本不支持模块,这将对你造成影响。最后一个不支持 Go 模块的版本被标记为 v2.1.0。

快速开始

安装

Martian Proxy 可以使用 go install 进行安装

root@kitploit:~
go get github.com/google/martian/ && \
go install github.com/google/martian/cmd/proxy

启动代理

假设你已经安装了 Martian,运行代理很简单:

root@kitploit:~
$GOPATH/bin/proxy

如果你想在 Martian 运行时查看系统日志,请传入详细程度标志:

root@kitploit:~
$GOPATH/bin/proxy -v=2

默认情况下,Martian 将在端口 8080 上运行,Martian API 将在端口 8181 上运行。端口可以通过标志指定:

root@kitploit:~
$GOPATH/bin/proxy -addr=:9999 -api-addr=:9898

日志记录

对于请求和响应的日志记录,可以使用日志修改器,或者如果使用 -har 标志,则可以使用 HAR 日志。

HAR 日志记录

要在 Martian 中启用 HAR 日志记录,请使用 -har 标志调用二进制文件:

root@kitploit:~
$GOPATH/bin/proxy -har

如果启用了 -har 标志,将有两个与 HAR 相关的端点可用:

root@kitploit:~
GET http://martian.proxy/logs

将检索自上次重置以来代理所见的所有请求和响应的 HAR 日志。

root@kitploit:~
DELETE http://martian.proxy/logs/reset

将重置内存中的 HAR 日志。请注意,除非定期重置,否则日志将无限增长。

配置

一旦 Martian 运行起来,你需要配置它的行为。如果没有配置,Martian 只是代理请求和响应,而不会对它们做任何操作。如果启用了日志记录,则无需额外配置即可进行日志记录。

Martian 通过通过 HTTP 发送的 JSON 消息进行配置,这些消息的一般形式如下:

root@kitploit:~
{
  "header.Modifier": {
    "scope": ["response"],
    "name": "Test-Header",
    "value": "true"
  }
}

上述配置告诉 Martian 在所有响应上注入一个名为 "Test-Header"、值为 "true" 的标头。

让我们分解一下这条消息的各个部分。

  • [package.Type]:你想使用的修改器的包类型。在这里是 "header.Modifier",它是设置标头的修改器的名称(要了解更多关于 header.Modifier 的信息,请参阅修改器参考)。

  • [package.Type].scope:指示是将修改器应用于请求、响应还是两者。这可以是一个包含 "request"、"response" 或两者的数组。

  • [package.Type].[key]:修改器特定的数据。对于标头修改器来说,我们需要标头的 name 和 value。

这是一个简单的配置,对于更复杂的配置,修改器与组和过滤器结合使用,以组合出所需的行为。

要配置 Martian,请将 JSON POST 到 http://martian.proxy/modifiers。你可以使用所选择的任何语言提供的机制来发出 HTTP 请求,但出于演示目的,curl 可以正常工作(假设你的配置在一个名为 modifier.json 的文件中)。

root@kitploit:~
    curl -x localhost:8080 \
         -X POST \
         -H "Content-Type: application/json" \
         -d @modifier.json \
            "http://martian.proxy/configure"

拦截 HTTPS 请求和响应

如果配置得当,Martian 支持修改 HTTPS 请求和响应。

为了使 Martian 能够拦截 HTTPS 流量,必须在浏览器中安装一个自定义的 CA 证书,这样就不会显示连接警告。

安装 CA 证书的最简单方法是使用必要的标志启动代理,使用 -cert 和 -key 标志指定自定义 CA 证书和私钥,或者使用 -generate-ca-cert 标志让代理生成一个。

代理启动后,在配置为使用该代理的浏览器中访问 http://martian.proxy/authority.cer,将出现安装证书的提示。

在 examples/main.go 中有几个标志可用于配置 MITM 功能:

root@kitploit:~
-key=""
  PEM 编码的 CA 证书私钥文件,与 -cert 提供的证书一起使用;用于签名即时生成的证书
-cert=""
  PEM 编码的 CA 证书文件,用于生成证书
-generate-ca-cert=false
  生成一个用于中间人攻击的 CA 证书和私钥;选择此选项的大多数用户会立即在需要拦截其流量的浏览器中访问 http://martian.proxy/authority.cer 以安装新生成的 CA 证书
-organization="Martian Proxy"
  在中间人攻击期间,动态生成的证书上设置的组织名称
-validity="1h"
  动态生成的证书在请求时间前后有效的时间窗口;总有效时间范围是 validity 值的两倍(请求前 1 小时和请求后 1 小时)

检查验证器

假设你已经配置 Martian 验证特定 URL 的响应中是否存在某个特定标头。

以下是一个配置,用于验证所有对 example.com 的请求都返回 200 OK 响应。

root@kitploit:~
      {
        "url.Filter": {
          "scope": ["request", "response"],
          "host" : "example.com",
          "modifier" : {
            "status.Verifier": {
              "scope" : ["response"],
              "statusCode": 200
            }
          }
        }
      }

一旦 Martian 运行、配置完成,并且你想要验证的请求和结果响应已经发生,你可以验证你期望只收到 200 OK 响应。

要检查验证,请执行

root@kitploit:~
GET http://martian.proxy/verify

未满足的期望会被记录为错误,通过向 host:port/martian/verify 发送 GET 请求可以检索到错误列表,该请求将返回一个错误列表:

root@kitploit:~
  {
      "errors" : [
          {
              "message": "response(http://example.com) status code verify failure: got 500, want 200"
          },
          {
              "message": "response(http://example.com/foo) status code verify failure: got 500, want 200"
          }
      ]
  }

验证错误保存在内存中,直到通过以下方式明确清除:

root@kitploit:~
POST http://martian.proxy/verify/reset

将 Martian 用作库

Martian 也可以被包含到任何 Go 程序中,并作为库使用。

全链路的修改器

Martian 的请求和响应修改系统被设计为通用且可扩展的。设计目标是提供独立的修改器行为,这些行为可以组合起来构建几乎任何所需的修改。

在使用 Martian 组合行为时,你需要熟悉以下不同类型的交互:

  • 修改器:改变请求或响应的状态
  • 过滤器:有条件地允许包含的修改器执行
  • 组:将多个修改器捆绑在一起,按组中指定的顺序执行
  • 验证器:根据期望跟踪网络流量

修改器、过滤器和组都实现了 RequestModifier、ResponseModifier 或 RequestResponseModifier(定义在 martian.go 中)。

root@kitploit:~
ModifyRequest(req *http.Request) error

ModifyResponse(res *http.Response) error

在整个代码(和本文档)中,你会看到使用“修改器”一词来涵盖修改器、组和过滤器。即使一个组不修改请求或响应,我们仍然将其称为“修改器”。

我们将任何实现了 modifier 接口的东西称为 Modifier。

解析器注册

每个修改器必须在 Martian 中注册自己的解析器。解析器负责将 JSON 消息解析为实现修改器接口的 Go 结构体。

Martian 将修改器解析器存储为一个从字符串到函数的映射,该映射在运行时构建。每个修改器负责通过在 init() 中调用 parse.Register 来注册其解析器。

parse.Register 的签名:

root@kitploit:~
Register(name string, parseFunc func(b []byte) (interface{}, error))

Register 接受一个字符串形式的键,格式为 package.Type。例如,cookie_modifier 以键 cookie.Modifier 注册,query_string_filter 以 querystring.Filter 注册。该字符串与 JSON 配置消息中的 name 值相同。

在以下配置消息中,header.Modifier 是标头修改器在 header_modifier.go 的 init() 中注册的方式。

root@kitploit:~
{
  "header.Modifier": {
    "scope": ["response"],
    "name" : "Test-Header",
    "value" : "true"
  }
}

来自 header_modifier.go 的解析器注册示例:

root@kitploit:~
func init() {
  parse.Register("header.Modifier", modifierFromJSON)
}

func modifierFromJSON(b []byte) (interface{}, error) {
  ...
}

添加你自己的修改器

如果你有一个我们尚未开发相应修改器、过滤器或验证器的用例,你可以很容易地根据你的非常具体需求扩展 Martian。

一个修改器有两个必需部分:

  • 实现修改器接口
  • 注册解析器

任何实现了这些接口的 Go 结构体都可以作为 modifier 使用。

联系方式

有关如何使用 Martian 的问题和评论、功能公告或设计讨论,请查看我们的公共 Google Group:https://groups.google.com/forum/#!forum/martianproxy-users。

对于与安全相关的问题,请向我们的私人核心组发送详细报告:[email protected]。

免责声明

这不是 Google 官方产品(无论实验性的还是其他),它只是碰巧由 Google 拥有的代码。

下载工具