使用命令行提取公网 IPv6 地址

图片[1]-使用命令行提取公网 IPv6 地址-天煜博客

以下命令旨在在不同操作系统中提取第一个非临时非本地链接(fe80)非回环(::1)的纯净公网 IPv6 地址。

1. Windows (CMD)

适用于 Windows 10 / Windows 11。该命令通过行号过滤,强制只截取第一行结果,完美避开多网卡或多 IP 导致的输出混乱问题。

for /f "tokens=2* delims=:" %a in ('ipconfig ^| findstr "IPv6" ^| findstr /v "临时 Temporary" ^| findstr /v "fe80" ^| findstr /n . ^| findstr "^1:"') do @for /f "tokens=*" %c in ("%b") do @echo %c

    • 逻辑解析
        • findstr /v "临时 Temporary":排除隐私扩展生成的临时 IPv6 地址。

        • findstr /v "fe80":排除本地链接地址。

        • findstr /n . | findstr "^1:":给结果加上行号并只取第一行(解决多 IP 输出问题)。

        • tokens=2*delims=::精准切割冒号后的 IP 字符串。

2. Linux (Ubuntu 24 / Debian / CentOS)

现代 Linux 发行版推荐使用 ip 命令(iproute2),它比老旧的 ifconfig 更容易通过 scope 参数进行过滤。

ip -6 addr show scope global | grep inet6 | grep -v temporary | head -n 1 | awk '{print $2}' | cut -d/ -f1

    • 逻辑解析
        • scope global:直接仅显示全局范围地址(自动排除 fe80::1)。

        • grep -v temporary:排除动态临时地址。

        • cut -d/ -f1:去除 CIDR 后缀(如 /64),只保留 IP 地址。

3. macOS (Terminal)

macOS 使用 BSD 风格的 ifconfig。由于 macOS 默认将回环地址(Loopback)放在首位,因此必须显式排除 ::1

ifconfig | grep "inet6 " | grep -v -e "fe80" -e "temporary" -e "::1" | awk '{print $2}' | head -n 1

    • 逻辑解析
        • grep "inet6 ":筛选 IPv6 行(注意末尾空格,防止匹配到 tunnel 等干扰项)。

        • grep -v -e ...:同时排除本地链路 (fe80)、临时地址 (temporary) 和回环地址 (::1)。

        • awk '{print $2}':直接提取第二列的 IP 地址。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容