编辑
2025-10-03
TechNotes
00

目录

一、问题描述
二、常见查看方法
方法一:查看出口 IP(最常用)
方法二:使用 dig 或 host
方法三:查看云服务商控制台或网卡信息
三、一键脚本查看公网和内网 IP(升级版)
使用方法
四、curl / ipinfo 原理解析该
1️⃣ 核心原理
2️⃣ -4 / -6 参数
3️⃣ ifconfig.me vs ipinfo.io
4️⃣ 精准性与误差来源
5️⃣ 安全与隐私注意
6️⃣ 高级示例
五、总结

在管理云服务器时,很多时候你已经通过 SSH 登录,但想确认服务器的 公网 IP(对外访问互联网的地址)或 内网 IP(私网 IP)时,需要怎么做?

最常用的方法是:

bash
curl -4 ifconfig.me

或者:

bash
curl ipinfo.io/ip

输出的就是服务器访问互联网时使用的公网 IP,简单直接。


一、问题描述

云服务器通常有两种 IP:

  1. 内网 IP(Private IP):用于同一数据中心内部通信,常见网段:10.x.x.x、172.16.x.x、192.168.x.x。
  2. 公网 IP(Public IP):服务器对外访问互联网的地址,可能通过 NAT 映射分配。

新手登录 SSH 后,经常只能看到内网 IP,不确定公网 IP,因此需要命令或云厂商提供的方式查询。


二、常见查看方法

方法一:查看出口 IP(最常用)

bash
curl -4 ifconfig.me

或者:

bash
curl ipinfo.io/ip

输出公网 IP,即服务器对外访问互联网的地址。


方法二:使用 dig 或 host

bash
dig +short myip.opendns.com @resolver1.opendns.com

或者:

bash
host myip.opendns.com resolver1.opendns.com

利用 DNS 服务快速获取公网 IP。


方法三:查看云服务商控制台或网卡信息

  1. 控制台查看 云厂商(阿里云、AWS、腾讯云等)通常在控制台直接显示分配的公网 IP。

  2. 查看本机网卡(可能只显示内网 IP)

bash
ip addr show

注意:网卡上一般显示的是私网 IP(10.x / 172.x / 192.168.x),公网 IP 通常通过 NAT 映射。


三、一键脚本查看公网和内网 IP(升级版)

为了方便,可以写一个脚本,直接显示 内网 IP(所有网卡,IPv4/IPv6)公网 IP(IPv4/IPv6),并使用 DNS 验证公网 IP

bash
#!/bin/bash # get_ip_full.sh - 升级版:显示内网、公网 IPv4/IPv6,并验证公网 IP echo "=== 云服务器 IP 信息 ===" # 1️⃣ 内网 IP echo "内网 IP:" ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '^127\.' || echo "未找到 IPv4" ip -6 addr show | grep -oP '(?<=inet6\s)[\da-f:]+(?=/)' | grep -v '^::1' || echo "未找到 IPv6" # 2️⃣ 公网 IP IPv4 echo -n "公网 IPv4: " if command -v curl >/dev/null 2>&1; then curl -4 -s ifconfig.me || echo "获取失败" elif command -v wget >/dev/null 2>&1; then wget -4 -qO- ifconfig.me || echo "获取失败" else echo "请安装 curl 或 wget" fi # 3️⃣ 公网 IP IPv6 echo -n "公网 IPv6: " if command -v curl >/dev/null 2>&1; then curl -6 -s ifconfig.me || echo "获取失败" elif command -v wget >/dev/null 2>&1; then wget -6 -qO- ifconfig.me || echo "获取失败" else echo "请安装 curl 或 wget" fi # 4️⃣ DNS 验证公网 IP(IPv4) echo -n "DNS 验证公网 IP: " dig +short myip.opendns.com @resolver1.opendns.com || echo "获取失败" echo "========================"

使用方法

bash
chmod +x get_ip_full.sh ./get_ip_full.sh

示例输出:

=== 云服务器 IP 信息 === 内网 IP: 192.168.1.10 fe80::1a2b:3c4d:5e6f 公网 IPv4: 123.45.67.89 公网 IPv6: 2001:db8::1234 DNS 验证公网 IP: 123.45.67.89 ========================

四、curl / ipinfo 原理解析该

1️⃣ 核心原理

  • curl ifconfig.mecurl ipinfo.io/ip 本质上是向外部回显服务发起 HTTP 请求
  • 回显服务通过请求的源地址(socket/HTTP REMOTE_ADDR)获取你的公网 IP,并返回给你。

所以你看到的就是服务器对外的出口 IP。


2️⃣ -4 / -6 参数

  • -4 强制使用 IPv4
  • -6 强制使用 IPv6
  • 不指定时,系统可能优先使用 IPv6(DNS/路由决定)

3️⃣ ifconfig.me vs ipinfo.io

服务输出特点
ifconfig.me纯文本 IP简单、轻量、响应快,适合脚本
ipinfo.ioIP + JSON 元信息包含城市、运营商、ASN 等,适合开发查询;有配额限制

4️⃣ 精准性与误差来源

  • NAT 或云厂商出网网关可能影响显示 IP(通常就是公网 IP)
  • 代理、CDN 或反向代理可能影响 IP 显示
  • IPv4 / IPv6 连接优先级会影响返回结果

5️⃣ 安全与隐私注意

  • 使用 https:// 保护传输安全
  • 高频调用注意服务限制 / 隐私
  • 对隐私敏感场景可自建回显服务或用云控制台查看

6️⃣ 高级示例

  • JSON 形式查看公网 IP + 元信息:
bash
curl -s https://ipinfo.io/json | jq .
  • DNS 验证公网 IP(不走 HTTP):
bash
dig +short myip.opendns.com @resolver1.opendns.com

五、总结

  • 最常用方法:curl -4 ifconfig.mecurl ipinfo.io/ip
  • 可通过 DNS、云控制台或脚本获取内网/公网 IP
  • 升级版脚本 get_ip_full.sh 一次性显示内网、公网 IPv4/IPv6 并验证
  • 理解原理可以帮助判断复杂网络环境下的公网 IP 是否准确
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!