uip - 获取公网 IP 的小程序
用 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