STUN 公网 IP / NAT 检测

并发向多个 STUN 服务器发送 Binding Request,收集全部 srflx 反射地址:列出所有出口 IP、比对映射端口判定 NAT 映射行为、检查是否存在分流代理。 纯前端实现。

探测服务器 点击切换启用

待机中,点击「开始检测」

出口 IP 0

尚未检测

NAT 映射行为

待检测
检测后会给出 NAT 映射行为结论:端点无关映射(Cone)、端点相关映射(Symmetric)、无 NAT,或多出口。
STUN 出口 IP
—
HTTP 出口 IP
—
出口一致性
—
唯一映射数
—
本地 / 内网 IP
—
总耗时
—
查看原始 ICE candidate0
等待检测…
多 IP 意味着什么?不同 STUN 服务器看到不同的出口地址,通常说明流量走了分流代理 / 多线出口, 或设备同时挂在多个网络(如 Wi-Fi + 蜂窝)。同一 NAT 正常只有一个出口 IP。
NAT 映射行为怎么判?在同一个 RTCPeerConnection 里同时配置多个 STUN 服务器, 浏览器会复用同一个本地 UDP socket,因此不同服务器回报的映射地址可直接比较: 映射地址完全相同 → 端点无关映射(Cone 类);IP 相同但端口每次不同 → 端点相关映射(Symmetric,P2P 穿透困难)。
Full Cone 与 Restricted Cone 的区分需要 RFC 5780 的过滤行为测试(服务器从另一地址主动回包,即 CHANGE-REQUEST)。浏览器 WebRTC API 不允许发送自定义 STUN 包,因此这里只能判定到 Cone / Symmetric 级别,无法进一步区分 Full 与 Restricted——页面会如实标注。
读不到内网 IP?现代浏览器对 host 候选做了 mDNS 混淆(显示为 xxx.local),属隐私保护。
STUN 全部失败?多为 UDP 被封锁或走了不支持 UDP 的代理,可点「HTTP 兜底」用 HTTPS 接口查出口 IP (拿不到端口、也判不了 NAT)。