uip - 获取公网 IP 的小程序

2023-04-11 03:14:10 +08:00
 dndx

用 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

6448 次点击
所在节点    分享创造
53 条回复
dndx
2023-04-12 18:50:39 +08:00
@v2wtf `uip -4` 试试,可能是你的 IPv6 不通
qsnow6
2023-04-12 20:11:54 +08:00
@dndx #41 ipv4 也有一定机率会连不通, 可能是 Google 的服务在墙内被干扰了.
```shell
$ ./uip_x86_64-unknown-linux-musl -4
Error: ErrTransactionTimeOut
```
dndx
2023-04-12 22:18:57 +08:00
@qsnow6 我觉得你说的很有道理,在 ipip 上测了一下,好像 `stun.l.google.com` 在国内一些地方的确是解析不出来(主要是联通)。

刚发布了一个新版本 `v0.1.5`,在这个版本里默认的服务器已经改为了 `stun.cloudflare.com`,应该会好一些。考虑到国外的用户,不太想用国内的服务器作为默认值,希望理解。
Ghonewyn
2023-04-12 22:41:54 +08:00
@dndx 同问,这个方案在 windows 上能实现吗?
kaddusabagei38
2023-04-13 10:52:12 +08:00
这个思路很棒
devliu1
2023-04-13 11:12:00 +08:00
Ghonewyn
2023-04-13 16:25:51 +08:00
@tux https://github.com/amorphobia/uip 已经有大佬改出来了 windows 下的 target
dndx
2023-04-13 22:22:13 +08:00
@Ghonewyn
@tux

Windows 版已经打出来了 https://github.com/dndx/uip/releases/tag/v0.1.6

感谢 amorphobia 贡献 https://github.com/dndx/uip/pull/1

我没有 Windows 系统,希望能有人帮忙测试一下能不能用。
dorothyREN
2023-04-16 13:03:49 +08:00
mohumohu
2023-04-20 16:29:48 +08:00
OP 的项目不错,是否可以支持 SOCKS5 代理?因为 stun 用来测 socks 的 nat type 挺方便的,最好支持一次性重试多个列表。
另外公网获取 IP 的也有挺多 URL 可以用的,OP 可以看看这个 DDNS 脚本里面内置了一些获取 IP 的 URL: https://github.com/kkkgo/UE-DDNS
fox233
2023-04-28 14:54:21 +08:00
releases 里面为啥没有 x86_64 的 Linux 文件呢?只有安卓的和 arm 的
dndx
2023-04-28 16:25:07 +08:00
EsWann
2023-07-07 03:10:18 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/931402

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX