如何从所有接口中找到机器的有效私有 IP 地址?

如何从所有接口中找到机器的有效私有 IP 地址?

我的主要目标是找出 Linux 机器中有效接口的私有 IP 地址。

例如,我有 7 个接口,其中两个接口 docker0 的 IP 地址172.12.2.1eth0 172.23.32.201

在这两者中,我只需要172.23.32.201一次。

我尝试了两种不同的方法来完成它:

1) I tried $(hostname -I | awk '{print $1}') but does it guarantees that i get the host instance IP.

2) ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
This gives me all the ip address of every interface

有人能帮我解决这个问题吗?

答案1

你为什么不使用简单的ifconfig {interfacename}

为了仅获取 IP 地址,我会这样做:

ifconfig eth0 | grep inet | grep -v inet6 | awk '{ print $2 }'

答案2

我得到了答案:首先,获取机器的实际接口名称,然后过滤掉 ip

ifconfig $(route | grep '^default' | grep -o '[^ ]*$') | grep inet | grep -v inet6 | awk '{ print $2 }'

答案3

假设所需接口是主(最低度量)网关,请尝试:

ip address show "$(ip route | grep '^default' | head -n 1 | awk '{ print $5 }')" | grep inet | grep -v inet6 | awk -F" " '{ print $2 }' | cut -d/ -f1

这使用较新的接口命令“ip”(来自“iproute2”包),而不是较旧的“ifconfig”和“route”(来自“net-tools”包)。该命令可以缩短为仅使用“ip a show...”和“ip r...”,但为了清楚起见,我使用了完整的开关。使用 ifconfig/route:

ifconfig "$(route -n | grep '^0.0.0.0' | head -n 1 | awk '{ print $8 }')" | grep inet | grep -v inet6 | awk '{ print $2 }'

使用“route -n”来阻止解析主机名。

相关内容