知识点 | 麒麟OS环境中curl -4回显真实IP的原因
接到同事问的一问题,在执行curl -4 http://127.0.0.1:33242/应用程序 命令时,反馈了服务器真实的ip地址,问是什么原因?
本文将主要介绍几种curl -4反馈服务器ip地址的几种可能场景。
先说结论:
curl -4 127.0.0.1 通常不会返回实际的服务器公网IP 地址,而是访问本地回环地址(127.0.0.1),即本机自身。但你的问题可能涉及某些特殊情况,下面分几种情况解释可能的原理。
先来回顾下curl命令和作用。
curl(Client URL)是一个功能强大的 命令行工具,用于在 Linux/Unix 系统(以及 Windows)中传输数据,支持 HTTP、HTTPS、FTP、SFTP、SCP、SMTP 等多种协议。它广泛用于 API 测试、文件下载、网页抓取、数据上传 等场景。常见的curl参数选项如下:
选项 | 作用 |
-v | 显示详细请求/响应(调试模式) |
-s | 静默模式(不显示进度/错误) |
-o FILE | 下载到指定文件 |
-O | 下载并使用远程文件名 |
-L | 自动跟随重定向 |
-H "Header: Value" | 自定义 HTTP 头 |
-d "data" | POST 请求发送数据 |
-X GET/POST/PUT | 指定 HTTP 方法 |
-u user:pass | 基本认证(登录) |
-k | 忽略 SSL 证书错误(不安全) |
--limit-rate 1M | 限制下载速度 |
1. 正常情况下 curl -4 127.0.0.1 的行为
加参数-4 强制使用 IPv4 协议。
127.0.0.1 是本地回环地址(Loopback),仅用于本机内部通信。如果本地运行了 Web 服务(如 Nginx、Apache),curl 会返回该服务的响应内容(如 Hello World),但不会返回服务器的公网 IP。
2. 可能返回服务器 IP 的情况
如curl -4 127.0.0.1 返回了服务器的公网 IP,可能是以下常规和原因:
情况1:服务器配置了 HTTP 头或重定向
某些Web 服务(如反向代理、负载均衡器)可能在响应头中插入服务器的公网 IP,例如:
http X-Server-IP: 203.0.113.45
或者服务端脚本(如PHP/Python)主动返回 IP:
curl -4 127.0.0.1 脚本
返回:{"ip": "203.0.113.45"}
情况2:本地服务代理了外部请求
如127.0.0.1 上的服务(如 Nginx)配置了反向代理,将请求转发到外部接口并返回公网 IP:
nginx
location / {
proxy_pass http://api.ipify.org; 返回客户端公网 IP 的服务
}
此时访问127.0.0.1 会返回类似:
curl -4 127.0.0.1
返回:203.0.113.45
情况3:DNS 或 Hosts 文件被修改
如/etc/hosts 文件将 127.0.0.1 错误映射到某个域名(如 example.com),可能导致请求被转发到外部服务:
plaintext
127.0.0.1 example.com 错误配置
此时curl -4 127.0.0.1 实际访问的是 example.com 的服务。
3. 如何获取服务器公网 IP?
如果目标是获取服务器的公网IP,正确的方法是:
1. 通过外部服务:
curl -4 ifconfig.me
curl -4 icanhazip.com
2. 通过本地网络接口(需替换 eth0 为实际网卡名):
ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
文章总结
curl -4 127.0.0.1 默认不会返回公网 IP,除非服务端主动返回或配置了代理。如若像本文开头观察到异常返回真实物理ip的,需检查本地服务配置(如HTTP 头、反向代理、Hosts 文件等)。
文章至此。