用 Rust 写了一个获取公网 IP 的小程序。

其实本来不想造这个轮子的,但是发现国内能稳定提供获取 IP 的服务少之又少,要么不稳定,要么会有各种限流。

今天突发奇想,NAT 打洞用的 STUN 服务本身就会返回客户端的 IP 地址,国内有不少大厂维护的 STUN 服务器,直接用肯定是最稳定的(因为大厂本身自己的服务也需要用到)。这些 STUN 服务器的稳定性应该不是个人搭建的 IP 查询服务能比的,跑路被打的风险也小很多。

简单 Google 了一下,竟然还没有人做过专门用来做这个的程序。我就基于 Rust 的 stun Crate example 改了一个。

用起来非常简单,直接到 Release 页面下载自己架构的可执行文件 chmox +x uip 或者 cargo install uip 即可。编译的二进制大小也进行了优化,只有 1 MB 多点,也没有别的运行时依赖。

不带参数默认使用 Google 的 STUN 服务器,但是也可以使用国内的服务器,比如:

$ uip
203.0.113.1

$ uip stun.qq.com
203.0.113.1

$ uip stun.miwifi.com
203.0.113.1

通过返回值是否为 0 可以判断是否成功获得 IP 地址。

也欢迎大家分享可以使用的公开 STUN 服务器地址,可以在项目 README.md 里提 PR 。

项目地址: https://github.com/dndx/uip
更多能用的 STUN 服务器:

CF:


$ uip stun.cloudflare.com

$ uip -4 stun.cloudflare.com # IPv4 only

国内 B 站的:


$ uip stun.chat.bilibili.com