当前位置:首页 > 技术 > 正文内容

UniFi API Browser 部署与控制器数据查询实战指南

访客 技术 2026年6月2日 1

在管理 Ubiquiti UniFi 网络设备时,直接调用控制器 API 往往需要处理复杂的 JSON 结构和认证流程。UniFi API Browser 作为一个开源的 PHP Web 应用,为网络工程师和开发者提供了一个轻量级的可视化面板,用于直接查询和渲染 UniFi Controller 暴露的底层数据。

核心架构与特性

  • 多维度数据渲染:将原始的 API JSON 响应转换为结构化的 HTML 表格,涵盖客户端状态、AP 射频指标、交换机端口统计等。
  • 多租户会话管理:原生支持多站点(Site)上下文切换,允许在单一面板中管理分布在不同物理位置的 UniFi 站点。
  • 可扩展的数据集合:通过模块化的集合定义(Collections),开发者可以快速添加自定义的 API 端点查询逻辑。

环境部署与凭证配置

该工具基于 PHP 构建,建议部署在支持 PHP 7.4+ 及 cURL 扩展的 Web 服务器(如 Nginx 或 Apache)上。

1. 获取源码

通过版本控制系统拉取项目代码,并安装必要的依赖:

# 克隆项目仓库
git clone https://github.com/malle-pietje/UniFi-API-browser.git unifi-browser
cd unifi-browser

# 如果使用 Composer 管理依赖,可执行安装
composer install --no-dev

2. 控制器凭证注入

系统通过独立的配置文件管理 UniFi 控制器的连接凭证。我们需要在 config/ 目录下创建身份验证文件,而不是直接修改核心代码。

创建 config/users.php,定义控制器集群的访问凭据:

<?php
// config/users.php
// 定义 UniFi 控制器节点及其认证参数

$controller_nodes = [
    'main-office' => [
        'host'     => '192.168.1.100',
        'port'     => 8443,
        'user'     => 'api_readonly_user',
        'password' => 'SecureP@ssw0rd!',
        'version'  => '7.2.92', // 控制器版本号
        'site_id'  => 'default'
    ],
    'branch-site' => [
        'host'     => 'unifi.branch.example.com',
        'port'     => 443,
        'user'     => 'admin',
        'password' => 'BranchSecret123',
        'version'  => '7.1.68',
        'site_id'  => 'branch_01'
    ]
];

// 安全设置:防止未授权访问面板
$require_login = true;
$admin_password_hash = password_hash('WebUI_Password', PASSWORD_BCRYPT);

3. 自定义数据集合 (Collections)

若需查询官方预置集合之外的数据,可通过扩展集合配置文件来注册新的 API 路由。以下示例展示了如何添加一个获取特定网关深度检测数据的自定义集合:

<?php
// config/collections-custom.php

$custom_api_collections = [
    'gateway_dpi_stats' => [
        'name'        => 'Gateway DPI Statistics',
        'description' => '获取 UXG/UDM 设备的深度包检测应用统计',
        'api_path'    => '/stat/dpi',
        'method'      => 'GET',
        'requires_id' => false,
        'parser'      => function($raw_data) {
            // 自定义数据清洗逻辑,仅保留流量大于 1MB 的应用
            return array_filter($raw_data, fn($app) => $app['rx_bytes'] > 1048576);
        }
    ]
];

项目目录与路由解析

  • ajax/:处理前端异步数据拉取。例如 fetch_sites.php 负责在用户切换下拉菜单时,动态请求并缓存当前控制器的站点列表。
  • templates/:基于 Twig 模板引擎的视图层。layout/main.html.twig 定义了全局导航栏和站点切换组件的 DOM 结构。
  • src/:核心业务逻辑层,封装了与 UniFi Controller 的 cURL 会话保持、CSRF 令牌处理及 Cookie 管理。

会话控制与调试建议

在进行 API 调试时,建议开启 PHP 的错误日志记录。工具内置了会话控制路由:

  • 访问 login.php 触发身份验证流程,系统会校验 users.php 中定义的哈希密码,并建立与后端控制器的 cURL Cookie 会话。
  • 通过 logout.php 销毁本地 PHP Session,并向 UniFi 控制器发送注销请求以释放 API 连接池资源。
  • 在排查"数据为空"的问题时,优先检查配置文件中的控制器版本号是否与实际运行的 UniFi Network Application 版本严格匹配,版本不匹配会导致 API 端点路径解析失败。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。