获取 Linux 服务器公网 IP 地址的方法
在 Linux 服务器管理和运维中,经常需要获取服务器的公网 IP 地址。本文将介绍几种可靠且常用的方法。
方法一:使用 ifconfig 命令(传统方法)
传统的 ifconfig 命令可以查看网络接口信息,但需要配合过滤命令来提取公网 IP。请注意,在一些较新的 Linux 发行版中,ifconfig 可能默认未安装,建议优先使用 ip 命令(见方法二)。
/sbin/ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addr:"
命令解析:
/sbin/ifconfig -a:列出所有网络接口的详细信息。grep inet:筛选出包含 "inet" 的行(IPv4 地址)。grep -v 127.0.0.1:排除本地环回地址。grep -v inet6:排除 IPv6 地址。awk '{print $2}':打印出第二列(通常是 IP 地址)。tr -d "addr:":删除可能存在的 "addr:" 字符串。
方法二:使用 ip 命令(推荐)
ip 命令是现代 Linux 系统上更推荐使用的网络配置工具,功能更强大,输出更规范。
ip addr show | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}' | cut -d'/' -f1
或者,更精确地针对特定公网接口(如 eth0 或 ens3):
ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
请将 eth0 替换为你的实际公网接口名称。
方法三:通过外部服务查询(最准确)
对于位于 NAT 网关或负载均衡器后方的服务器,上述方法获取的可能只是内网 IP。要获取真实的出口公网 IP,最可靠的方法是查询外部服务。
使用 curl 命令:
curl -s ifconfig.me
curl -s icanhazip.com
curl -s ipinfo.io/ip
curl -s api.ipify.org
使用 wget 命令:
wget -qO- ifconfig.me
注意: 使用此方法需要服务器能够访问外网。
方法四:使用 host 或 dig 命令(查询 DNS 记录)
如果你的服务器有绑定的域名,也可以通过查询域名来间接获得公网 IP。
host $(hostname -f) | grep "has address" | awk '{print $4}'
dig +short $(hostname -f)
总结与最佳实践
- 获取服务器本地配置的公网 IP: 优先使用
ip addr show命令。 - 获取服务器真实的出口公网 IP: 必须使用查询外部服务的方法(如
curl ifconfig.me)。 - 在脚本中自动化获取 IP 时,请考虑网络连通性和命令的可用性,做好错误处理。
提示: 原文提供的
ifconfig命令在部分新系统中可能无法直接使用,且未考虑 NAT 等复杂网络环境。本文已更新并补充了更现代、更可靠的多种方案。