当前Linux主机的公网出口IP需通过外网查询获取,推荐curl ifconfig.me获取纯IPv4地址;若无curl则用wget -qO- ifconfig.me;禁用HTTP时可用dig +short myip.opendns.com @resolver1.opendns.com;需结构化数据时用curl -s ipinfo.io或加jq解析;高可用场景可部署三接口轮询脚本。

服务器刚买回来、公司出口带宽切换、云防火墙加白名单、CDN 回源 IP 校验,这些场景绕不开同一个问题:当前这台 Linux 主机的公网出口 IP 到底是什么?它不存于网卡配置里,必须让服务器主动“向外看”才能拿到真实出口地址。
用 curl 直接查最简文本 IP
这是绝大多数运维人员第一反应的命令,轻量、预装率高、无依赖、适合脚本嵌入。
执行:curl -s ifconfig.me
返回结果就是纯 IPv4 地址,例如 43.128.26.90,末尾不带换行、无 HTML、无空格——【直接复制就能用,别手动删空行】。
如果提示 command not found: curl,说明系统极简(如某些 Alpine 容器镜像),改用 wget:wget -qO- ifconfig.me。注意中间是短横线不是下划线,写错会返回 404 页面源码。
绕过 HTTP 协议:用 dig 查 DNS 出口 IP
当你的网络环境禁用了出站 HTTP/HTTPS(比如金融或政企内网),但 DNS 查询仍放行时,这个方法就成为唯一通路。
执行:dig +short myip.opendns.com @resolver1.opendns.com
这条命令不走 HTTP,而是向 OpenDNS 的 DNS 服务器发起 TXT 记录查询,由 DNS 基础设施直接返回客户端源 IP。
若返回为空,请先确认 nslookup resolver1.opendns.com 能通;如果 DNS 解析本身失败,那 dig 方法就不可用,得换回 curl 或检查本地 /etc/resolv.conf 配置。
获取带地理位置的结构化数据
当你不只是要 IP,还需要知道归属地、运营商、ASN 编号,甚至想做自动归类分析时,JSON 接口更实用。
方法一:用 ipinfo.io 获取完整信息
执行:curl -s ipinfo.io
返回的是标准 JSON,含 ip、city、region、country、org、timezone 等字段。
方法二:只提取 IP 字段(需 jq)
执行:curl -s ipinfo.io/json | jq -r '.ip'
jq 是 JSON 解析利器,-r 参数去掉引号,输出就是干净 IP 字符串。没装 jq?运行 sudo apt install jq(Debian/Ubuntu)或 sudo yum install jq(RHEL/CentOS)。
注意:【ipinfo.io 免费版限 1000 次/天,高频轮询脚本请切到 ifconfig.me 或 checkip.amazonaws.com】。
构建高可用轮询脚本
单一服务可能临时不可达,生产环境要求稳。下面这个脚本按顺序尝试三个主流接口,任一成功即退出并打印结果。
第一步:创建可执行脚本文件
cat > /usr/local/bin/myip << 'EOF'<br>#!/bin/bash<br>for url in ifconfig.me icanhazip.com checkip.amazonaws.com; do<br> ip=$(curl -s --max-time 3 "$url" 2>/dev/null | tr -d '\r\n ')<br> if [ -n "$ip" ] && [[ "$ip" =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then<br> echo "$ip"<br> exit 0<br> fi<br>done<br>echo "failed"<br>EOF
第二步:赋予执行权限chmod +x /usr/local/bin/myip
第三步:立即使用myip
以后任何地方输入 myip,就等效于跑完一次三重保险查询。


















