博客 / Linux/ Linux 服务器获取公网 IP 地址的多种方法详解

Linux 服务器获取公网 IP 地址的多种方法详解

Linux 服务器获取公网 IP 地址的多种方法详解

获取 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 等复杂网络环境。本文已更新并补充了更现代、更可靠的多种方案。

发表评论

您的邮箱不会公开。必填项已用 * 标注。