You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过JavaScript检测Ubiquiti UniFi Security Gateway?

间接检测Ubiquiti UniFi Security Gateway的可行方案

由于浏览器无法直接获取路由器硬件信息,只能通过UniFi网关的特有行为或配置特征做间接推断,以下是几种可落地的检测思路:

1. 检测DNS劫持特征

部分UniFi网关会开启DNS劫持功能,查询不存在的域名时会返回网关自身IP或自定义错误页面地址。可通过加载不存在域名的资源,判断是否跳转到UniFi相关地址:

function detectUniFiDNSHijack() {
  return new Promise(resolve => {
    const testDomain = 'dummy-unifi-test-domain.com';
    const img = new Image();
    img.onload = () => {
      const isUniFi = img.src.includes('192.168.1.1') || img.src.includes('ubnt.com');
      resolve(isUniFi);
    };
    img.onerror = () => resolve(false);
    img.src = `http://${testDomain}/test.png?${Date.now()}`;
  });
}

// 使用示例
detectUniFiDNSHijack().then(isUniFi => {
  if (isUniFi) {
    // 展示针对UniFi网关的指导方案
    document.getElementById('unifi-guide').style.display = 'block';
  }
});

局限性:若用户关闭DNS劫持功能,该方法失效;其他品牌网关也可能存在类似劫持行为,存在误判可能。

2. 检查HTTP响应头标识

部分配置下的UniFi网关会在处理HTTP请求时添加含ubnt或unifi的自定义响应头,可通过请求自身服务器接口检查响应头特征:

async function detectUniFiHeader() {
  try {
    const res = await fetch('/ping', { method: 'HEAD' });
    const hasUniFiHeader = Object.keys(res.headers).some(key => 
      key.toLowerCase().includes('ubnt') || key.toLowerCase().includes('unifi')
    );
    return hasUniFiHeader;
  } catch (err) {
    return false;
  }
}

// 使用示例
detectUniFiHeader().then(isUniFi => {
  if (isUniFi) {
    console.log('可能检测到UniFi网关');
  }
});

局限性:仅当网关开启HTTP代理或自定义头注入功能时有效,通用性有限。

3. 推断局域网网关IP特征

UniFi网关默认管理IP多为192.168.1.1或192.168.0.1,可通过WebRTC获取局域网IP,尝试访问该IP管理页面并判断内容特征:

async function detectUniFiGatewayIP() {
  return new Promise(resolve => {
    const pc = new RTCPeerConnection({ iceServers: [] });
    pc.createDataChannel('');
    pc.createOffer().then(offer => pc.setLocalDescription(offer));
    
    pc.onicecandidate = (e) => {
      if (!e.candidate) return;
      const ipMatch = e.candidate.candidate.match(/([0-9]{1,3}\.){3}[0-9]{1,3}/);
      if (!ipMatch) {
        pc.close();
        resolve(false);
        return;
      }
      
      const localIP = ipMatch[0];
      // 匹配UniFi常见默认IP段
      if (!localIP.startsWith('192.168.') || !(localIP.endsWith('.1.1') || localIP.endsWith('.0.1'))) {
        pc.close();
        resolve(false);
        return;
      }
      
      // 尝试加载网关管理页面(受跨域限制,仅能做基础判断)
      const iframe = document.createElement('iframe');
      iframe.style.display = 'none';
      iframe.src = `http://${localIP}`;
      
      iframe.onload = () => {
        let isUniFi = false;
        try {
          isUniFi = iframe.contentDocument.title.includes('UniFi') || iframe.contentDocument.body.innerText.includes('Ubiquiti');
        } catch (err) {
          // 跨域无法读取内容,基于IP特征做推断
          isUniFi = true;
        }
        document.body.removeChild(iframe);
        pc.close();
        resolve(isUniFi);
      };
      
      iframe.onerror = () => {
        document.body.removeChild(iframe);
        pc.close();
        resolve(false);
      };
      
      document.body.appendChild(iframe);
    };
  });
}

// 使用示例
detectUniFiGatewayIP().then(isUniFi => {
  if (isUniFi) {
    // 展示指导方案
  }
});

局限性:WebRTC获取的IP不一定是网关,跨域限制导致无法准确读取管理页面内容,容易误判其他使用相同默认IP的网关。


重要说明

所有间接检测方法都无法100%准确识别UniFi网关,建议在检测后同时提供通用故障排查方案,避免仅依赖设备检测结果。

内容的提问来源于stack exchange,提问作者Simon Ferndriger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:52:08