应使用ip addr show dev wlan0(替换为实际网卡名)并筛选含scope global dynamic的inet行,以精准获取DHCP分配的主用IPv4地址;需同时匹配inet、scope global和dynamic三要素,再用grep -oP和cut提取纯IP。

直接用 ip addr show dev wlan0(把 wlan0 换成你的实际网卡名)查出该网卡所有地址,再过滤带 dynamic 和 scope global 的 IPv4 行,就能精准定位正在由 DHCP 分配、对外可通信、且会随租期变化的主用 IP。
先确认目标网卡名并查看基础输出
运行:
-
ip -br a | grep UP—— 快速列出所有已启用的网卡及其 IPv4/IPv6 地址 -
ip addr show dev eth0(或wlan0等)—— 查看指定网卡完整配置
重点观察 inet 行是否含 scope global dynamic 字样,这是动态全局地址的明确标识(如 inet 192.168.2.105/24 ... scope global dynamic noprefixroute wlan0)。
用 grep 精准提取 IPv4 动态全局地址
一条命令即可拿到干净的 IP(不含掩码和多余字符):
ip addr show dev wlan0 | grep -oP 'inet \K\d+\.\d+\.\d+\.\d+/\d+(?=\s+.*scope global dynamic)'- 若只要纯 IP(不带 /24),再加
| cut -d/ -f1: ip addr show dev wlan0 | grep -oP 'inet \K\d+\.\d+\.\d+\.\d+/\d+(?=\s+.*scope global dynamic)' | cut -d/ -f1
注意:必须同时匹配 inet(排除 IPv6)、scope global(排除 link/host 地址)、dynamic(排除静态配置),三者缺一不可。
区分“动态”与“静态”的关键线索
ip addr 输出中,判断依据不是有没有 dynamic 标签,而是结合上下文:
- 有
scope global dynamic→ 明确来自 DHCP,租期有限(valid_lft显示剩余秒数) - 有
scope global但无dynamic→ 多为静态配置(valid_lft forever是佐证) - 即使 NetworkManager 管理的静态连接,有时也会残留
dynamic字样,此时需交叉验证:nmcli connection show <conn-name> | grep ipv4.method看是否为manual
避免常见误判
别只看 IP 是否存在,要盯住行为特征:
-
lo或docker0上的scope global地址不是主机对外地址,忽略 -
scope link(如 fe80:: 地址)或scope host(如 127.0.0.1)不参与路由,不算“全局有效” - 同一网卡多个
inet行时,只有标记dynamic的才是 DHCP 获取的活跃地址;其余可能是手动添加的 secondary 地址
不复杂但容易忽略

















