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

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

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

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

工具目录

分类

查看所有分类
Loading categories
Prober — 基于 Ansible 和 BATS 的自动化、可复现网络安全测试框架,用于从多个观测点验证 DNS、主机可用性、开放端口和 TLS 配置。 | Kitploit
工具/GitLabGitLab/isnic/prober
漏洞扫描器端口扫描配置审计网络安全渗透测试DNS 分析
GitLabisnic/prober

Prober

基于 Ansible 和 BATS 的自动化、可复现网络安全测试框架,用于从多个观测点验证 DNS、主机可用性、开放端口和 TLS 配置。

查看仓库
145年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

可重现地检查网络假设

该项目使用 Ansible 生成 BATS 测试文件,以验证关于网络基础设施的安全假设。测试从探测机器("探测节点")运行,Prober 部署在这些节点上。

此工具旨在对自有网络进行可重现的自动化测试。它支持多个探测节点同时运行测试,每个节点对被测网络有不同的视角——例如,来自外部区域的视角、来自内部区域的视角,以及来自 DMZ 内部的视角。

使用 Prober 探测未经授权的网络可能是违法的。

要求

在用于将测试部署到探测节点的 Ansible 主控节点上:

  • ansible(当然!)
  • python*-netaddr(在 GNU/Linux 上)/ py*-netaddr(在 FreeBSD 上)

在探测节点本身:

  • bash
  • ssh
  • nmap
  • dig/kdig
  • testssl
  • 以及 Ansible 角色安装的任何其他依赖项。

在审查结果(*.tap 文件)的系统上,你可能希望安装 tappy。结果保存在每个探测节点上的本地 git 仓库中(默认位置为 /var/run/prober/results/,有关配置选项请参见下文),每次扫描运行完成时都会以日期作为标签提交,以便进行历史记录和轻松比较。

操作

使用 Ansible 将测试生成到探测节点。探测节点可以是任何 FreeBSD 或 GNU/Linux 主机,只要能够安装 Prober 的依赖项即可。它不需要专用于测试,但建议这样做——一个中等规模网络的扫描将耗时数小时,占用大量 CPU,并产生大量流量。

在不同的机器上部署 Prober 是有意义的,以便从不同的观测点检查你的网络状况(例如:内部网络、DMZ、互联网)。

在探测节点的测试目录中,会创建一个 run-tests.sh 脚本来方便运行测试。测试的运行方式确保在任何时候都有最多 <simultaneous_tests_count> 个测试同时运行——此变量是控制探测扫描使用多少资源和带宽的主要方式。

测试结果随后保存到本地 git 仓库中,提交时以给定运行完成的日期作为标签(对于某些耗时较长的探测运行,该日期可能与开始日期不同)。

如果基础设施包含超过几台主机,使用像 Mitogen 这样的工具可以显著加快测试生成速度。

快速入门

  1. 准备一台 Debian 或 FreeBSD 服务器作为探测节点(我们称之为 prober.example.com),确保你有 SSH 访问权限并且可以 sudo。

  2. 复制 示例 inventory 为 inventories/test/。

  3. 在该 test inventory 中:

    1. 编辑 group_vars/all.yml,根据你的需要设置 zone_nameserver、zone_domains、address_blocks;假设我们添加 example.com 作为唯一一个要探测的域
    2. 编辑 hosts 文件,在 [prober-nodes] 部分配置你的 prober.example.com 探测节点;假设你将 tested_zone 设置为 。

你现在可以 ssh 进入探测节点,检查 /opt/prober/ 中生成的测试。满意后,你可以通过执行 /opt/prober/run_tests.sh 来运行它们。结果将保存在 /var/run/prober/results 中。

配置

配置变量(在 probers.yml 中定义):

  • tests_directory(默认值:/opt/prober):
    探测节点上测试文件(*.bats 文件)生成到的目录。

  • results_repo_directory(默认值:/var/run/prober/results): 测试结果(*.tap 文件)仓库的目录;该目录会初始化一个 git 仓库,并创建一个 tap/ 子目录用于实际结果; 结果会提交到 git 仓库,提交以 yyyy-mm-dd 格式的日期作为标签(例如,对于 2020 年 3 月 19 日完成的测试,提交标签为 2020-03-19)。

  • simultaneous_tests_count(默认值:20):
    同时运行的测试数量。

  • prober_dev(默认值:未定义):
    跳过某些在开发机器上没有意义的任务(如设置 cron 或 )。

区域

区域在 ./data/<zone_name>.yml 文件中定义,顶级键为字符串 "tested_zone_settings",其中包含以下键:

  • name:区域名称,与文件名(不含扩展名)匹配;例如:"internal"、"external"、"dmz"
  • default(可选):该区域所有主机的默认设置
  • 正则键(必须以 "^" 字符开头)匹配多个 FQDN
  • 每个需要显式配置的 FQDN 对应的键

default 键、每个正则键和每个域键又可以包含以下键:

  • resolve:主机是否应解析到相关的 IP 地址(布尔值 true/false,或字符串 "skip")
  • ping:主机是否应响应 ping(布尔值 true/false,或字符串 "skip")
  • ports:允许开放的第 4 层端口列表(子键 "tcp" 和 "udp",每个包含一个整数数组,定义允许开放的端口,或字符串 "skip"),以及要深度检查的启用 TLS 的端口(tls 子键,包含一个以端口号为键、TLS 服务类型或字符串 "skip" 为值的字典)
    ports: "skip" 是以下内容的缩写: TLS 服务类型是 支持的任何类型,用于 选项; 用于 HTTPS 测试(包括头部);或 用于通用 TLS 测试。 :除非端口也在 键中标记为开放,否则 TLS 测试运行。

你可以在此处查看示例配置:data/example.yml。

全局默认值在 probers.yml 中定义。对于每个被探测的主机,这些值会与相关区域默认值、匹配主机名的正则键,最后与特定主机设置进行 combine。

这意味着在给定区域中,特定主机设置优先于正则匹配键的设置,正则匹配键又优先于区域默认值,而区域默认值又优先于全局默认值。

ports 键的处理有些特殊:如果在配置继承链中的某处列出了某些端口,则在链中较低的位置无法将其移除,只能添加更多端口号,或者通过 "skip" 完全跳过特定协议的端口测试。

区域文件的选择基于每个探测节点设置的 tested_zone 变量。

按 IP 测试 vs 按主机名测试

某些测试在单个 IP 地址的上下文中有意义,无论有多少域/主机名解析到该地址;例如,检查某些端口是否开放。例如,假设 a.example.com 和 b.example.com 指向同一个 IP 地址。根据上面的示例配置,这意味着端口 8080/tcp 和 8443/tcp 都应开放,并且预期端口 8443/tcp 上提供 HTTPS 服务。

某些测试在特定域/主机名与 IP 地址组合的上下文中有意义;例如,针对特定域名在特定 IP 地址上呈现的 TLS 证书是否有效。

这两种测试通过生成两个独立的目标列表来实现:

  • 按 IP 列表,其中每个元素的形式为:
    <ip-address> <hostname1> (<hostname2> <hostname3> ... <hostnameN>)
    此列表中 IP 地址不应重复;
  • 按主机名列表,其中每个元素的形式为:
    <ip-address> <hostname>
    此列表中 IP 地址可能重复。

一些测试文件仅针对第一个列表中的目标生成(例如,开放端口测试),而一些测试文件仅针对第二个列表中的目标生成(例如,TLS 相关测试)。

端口与测试

如果某些端口未开放,则某些测试没有意义。仅当在给定区域中配置了相关的 TCP 端口为 open 时,才会为该主机生成 TLS 相关测试。

默认情况下,如果在 ports.tcp 键中配置了任何已知的启用 TLS 的端口为开放,则会为其生成 TLS 测试。已知启用 TLS 的端口列表在 default_host_settings 变量 中定义。

常见问题解答

总体而言,Prober 与其他类似工具或服务的区别通常体现在以下方面的组合:

  • 是自托管的,Prober 节点可以部署在基础设施内部或外部的任何位置;
  • 专注于定期、可重现的扫描,验证定义明确、可配置的假设;
  • 让你控制测试运行的调度,并访问原始扫描结果。

这与 Shodan 有何不同?

Shodan 扫描互联网以发现暴露的系统。Prober 扫描你自己的基础设施,从你需要的尽可能多的观测点验证你对它的假设。它通过定义明确的测试和定期、计划的运行来关注结果的可重现性,并尝试为每个测试的假设提供布尔型“通过/失败”结果(同时提供完整的扫描结果数据以供检查)。

这与 BitSight 有何不同?

BitSight 验证他们认为合理的关于你基础设施的假设,而不让你控制或了解扫描何时进行,也不提供原始扫描数据。Prober 验证你自己对基础设施的假设,按照你的计划进行,并提供完整的原始扫描数据以供检查。

这与 Natlas 有何不同?

Natlas 似乎更接近 Shodan(扫描以发现暴露的主机,并显示查询结果),但能够自托管(因此也可以像 Prober 节点一样,将 Natlas Agent 部署在基础设施内外的不同位置)。Prober 定期扫描你的基础设施,以验证你对自己的基础设施的假设,这些假设在配置中表达。

待解决的大问题

  • 切换到一个更强大的测试系统?
    • BATS 有一些令人困扰的限制,例如:无法进行条件测试(“如果测试 A 失败则跳过测试 B”等)
    • 完全放弃测试系统?
      • https://docs.ansible.com/ansible/latest/reference_appendices/test_strategies.html
      • https://github.com/benwebber/ansible-tap
  • IPv6 全网段扫描不可能在一千年内完成
    • 提供一种配置扫描 IP 选择启发式方法的方式(随机、从底部开始并配置“步长”等)?

致谢

Logo 基于 Magnifying Glass by verry obito, ID; CC-By 和 Network by Creative Stall, PK; CC-By,来自 The Noun Project。

下载工具
test
  • 复制 示例区域配置 为 data/<tested_zone>.yml(因此在本例中为 data/test.yml)并进行编辑;至少,tested_zone_settings.name 键必须包含 tested_zone(即 test)。

  • 导出你的 DNS 区域并保存为 data/<dns_zone>.zone(在本例中为 example.com)。

  • 运行 playbook:

    root@kitploit:~
    ansible-playbook prober.yml -i inventories/test/ -vvv
    

    这将在探测节点上生成测试,并设置一个 cron 作业,使其每天凌晨 01:00 运行。

  • zabbix
    root@kitploit:~
    ports:
      tcp: "skip"
      udp: "skip"
      tls: "skip"
    
    testssl.sh
    -t/--starttls
    "https"
    "tls"

    注意
    "tcp"
    不会
  • skip:是否完全跳过该主机(布尔值)