获取给定接口的IP地址

获取给定接口的IP地址

我需要我指定的设备的 IP (v4) 地址。该响应稍后将在脚本中使用。这就是我所拥有的:

$ IFACE=eth1
$ ifconfig $IFACE |grep "inet " | awk '{print $2}'
10.0.0.33

有没有更干净(更短)的方法来做到这一点?

编辑:如果数据正是我所需要的。在这里找到解决方案:https://unix.stackexchange.com/a/84263/126008

答案1

它既不干净,也不短,但我认为你应该使用ip而不是ifconfig.它是最新的、经过维护的,也许更重要的是,对于您的目的来说,它会产生一致且可解析的输出。

如果您想要以下地址的 IPv4 地址eth0

$ ip -4 -o addr show eth0 | awk '{print $4}'
192.168.1.166/24  

采用 CIDR 表示法。如果不需要 CIDR 表示法,可以将其删除:

$ ip -4 -o addr show eth0 | awk '{print $4}' | cut -d "/" -f 1 
192.168.1.166  

您的问题表明您想要指定接口的地址。我认为上面的答案提供了这一点,但如果您想要您所在主机的 IPv4 地址,也许hostname更容易/更简洁:

$ hostname --all-ip-addresses | awk '{print $1}'  

或者,如果您想要 IPv6 地址:

$ hostname --all-ip-addresses | awk '{print $2}'  

最后,恕我直言“最优雅”的另一个选项获取用于连接到指定远程主机的任何接口的 IPv4 地址(在本例中为 8.8.8.8)。由 @gatoatigrado 提供这个答案:

$ ip route get 8.8.8.8 | awk '{ print $NF; exit }'
192.168.1.166

作为脚本:

$ RHOST=8.8.8.8  
$ ip route get $RHOST | awk '{ print $NF; exit }'

这对于具有多个接口和路由规范的主机可能很有用。

相关内容