“本机 IP”可能指完全不同的东西:
- 网卡上的局域网地址,例如
192.168.x.x; - 经过 NAT 后,互联网服务看到的公网出口地址;
- VPN、HTTP 代理或容器网络的出口地址;
- IPv4 和 IPv6 地址。
向外部服务发请求,查到的是对方看到的请求来源地址,不一定是网卡地址。
查询公网 IPv4
curl --fail --silent --show-error --max-time 5 \
https://api.ipify.org强制使用 IPv4:
curl -4 --fail --silent --show-error --max-time 5 \
https://api.ipify.org也可以使用另一个服务交叉确认:
curl -4 --fail --silent --show-error --max-time 5 \
https://ifconfig.co/ip--fail 会让 HTTP 4xx/5xx 返回失败状态,--max-time 防止脚本无限等待,--silent --show-error 适合在减少进度输出的同时保留错误信息。
查询公网 IPv6
前提是本机网络、DNS 和服务端都支持 IPv6:
curl -6 --fail --silent --show-error --max-time 5 \
https://api64.ipify.org如果命令失败,不代表机器一定没有 IPv6,也可能是当前网络、DNS、代理或防火墙不支持这条路径。
查询出口信息
需要 ASN、运营商或大致地区时,可以请求 JSON:
curl --fail --silent --show-error --max-time 5 \
https://ipinfo.io/jsonIP 地理位置通常只是近似值,不能当作用户精确位置。第三方服务还会记录请求来源,敏感环境应先评估隐私与合规要求。
查询局域网接口地址
Linux:
ip address
ip route get 1.1.1.1macOS 常见 Wi-Fi 接口:
ipconfig getifaddr en0机器有多个网卡、容器、VPN 或虚拟机时,可能同时存在多个地址。ip route get 更接近“访问某个目标时会使用哪个源地址”,但它仍然是 NAT 之前的本地地址。
脚本中不要只依赖一个公共站点
如果公网 IP 是部署或监控的关键输入,建议:
- 设置连接和总超时;
- 准备两个独立服务,但不要高频轮询;
- 校验返回值确实是合法 IP;
- 记录失败,不要把空字符串当成地址继续执行;
- 考虑代理、NAT 网关和双栈网络;
- 对稳定需求优先从云厂商元数据或网络配置获取。
公网 IP 查询服务适合诊断,不应该在每个业务请求里调用。