可以使用以下几种 bash 方法来获取 Linux 上网的 IP 地址:

方法一:使用 curl 命令(最常用、最准确)

# 获取 IPv4 地址
curl -4 ifconfig.me

# 或者使用其他服务
curl -4 icanhazip.com
curl -4 ip.sb
curl -4 ipinfo.io/ip

示例:

#!/bin/bash
# 将 IP 保存到变量
IP=$(curl -s -4 ifconfig.me)
echo "上网 IP 地址: $IP"

方法二:使用 wget 命令

# 获取 IPv4 地址
wget -qO- ifconfig.me

# 其他服务
wget -qO- icanhazip.com
wget -qO- ip.sb

方法三:使用 dig 命令(DNS 方式,不需要 HTTP)

# 通过 DNS 查询获取 IP
dig +short myip.opendns.com @resolver1.opendns.com

# 或者使用 Google 的 DNS
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | tr -d '"'

方法四:同时获取 IPv4 和 IPv6

#!/bin/bash

# 获取 IPv4
IPV4=$(curl -s -4 ifconfig.me)
echo "IPv4: $IPV4"

# 获取 IPv6(如果有)
IPV6=$(curl -s -6 ifconfig.me 2>/dev/null)
if [ -n "$IPV6" ]; then
    echo "IPv6: $IPV6"
else
    echo "IPv6: 不支持或未连接"
fi

方法五:本机命令方式(获取出口 IP)

如果需要获取本机默认路由的出口 IP,而不是公网 IP:

#!/bin/bash

# 方法1:使用 ip 命令
IP=$(ip -4 route get 1 | awk '{print $7;exit}')
echo "本机出口 IP: $IP"

# 方法2:使用 hostname 命令
hostname -I | awk '{print $1}'

# 方法3:查看默认网卡的 IP
ip addr show $(ip route | grep default | awk '{print $5}') | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

完整的脚本示例

#!/bin/bash

# 获取公网 IP 的函数
get_public_ip() {
    local ip=""
    # 尝试多个服务,直到成功
    for service in "ifconfig.me" "icanhazip.com" "ip.sb" "ipinfo.io/ip"; do
        ip=$(curl -s -4 --max-time 5 "$service" 2>/dev/null)
        if [ -n "$ip" ] && [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
            echo "$ip"
            return 0
        fi
    done
    return 1
}

# 获取本机出口 IP 的函数
get_local_ip() {
    ip -4 route get 1 2>/dev/null | awk '{print $7;exit}'
}

echo "=== IP 地址信息 ==="
echo "公网 IP: $(get_public_ip)"
echo "本机 IP: $(get_local_ip)"

常用的 IP 查询服务

服务地址 特点
ifconfig.me 经典服务,稳定
icanhazip.com 简单直接,支持 IPv4/IPv6
ip.sb 速度快,支持自定义格式
ipinfo.io/ip 只返回 IP,干净
api.ipify.org 专门用于程序调用

注意事项

  1. 网络连接:确保服务器可以访问外网
  2. 超时设置:添加 --max-time 5 防止卡住
  3. 错误处理:检查命令是否成功执行
  4. 代理影响:如果有代理,可能需要绕开

推荐使用curl -s ifconfig.me 简单可靠,适合大多数场景。

##获得上网网卡mac

#!/bin/bash

# 获取默认路由的网卡名称
INTERFACE=$(ip route | grep default | awk '{print $5}')

# 获取该网卡的 MAC 地址
MAC=$(cat /sys/class/net/$INTERFACE/address)

echo "上网网卡: $INTERFACE"
echo "MAC 地址: $MAC"
文档更新时间: 2026-03-08 13:43   作者:月影鹏鹏
IT运维支持-AIWALY-月影工作室