如果 IP 的大小随着每次连接而变化,我该如何使用脚本从 ifconfig 获取 IP 地址?

如果 IP 的大小随着每次连接而变化,我该如何使用脚本从 ifconfig 获取 IP 地址?

我目前正在研究这个

     IFTUN="$(ifconfig tun)"
     IPADD=${IFTUN:106:13}
     echo $IPADD

但如果 IP 地址的大小发生变化,此方法将不再起作用。

     inet addr:1.2.3.4  P-t-P:1.2.3.4  Mask:255.255.254.0
     UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
     RX packets:1151 errors:0 dropped:0 overruns:0 frame:0

因此,我想要的是一种从 ifconfig 获取 IP 的方法,无论字符数是“1.2.3.4”还是“111.22.3.44”,甚至是“111.222.333.444”

答案1

为了获取你的 IP 地址,Ifconfig你可以使用以下命令:

echo `ifconfig tun0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`

此命令将获取的 IP 地址tun0

答案2

使用已弃用ip的命令代替ifconfig

ipAddr=$( ip a s eth0 | awk '/inet.*brd/ {print $2}' )

示例输出:172.16.2.136/16

如果您不想包含 CIDR,请使用以下命令:

ipAddr=$( ip a s eth0 | awk '/inet.*brd/ {print $2}' | awk -F'/' '{print $1}' )

示例输出:172.16.2.136

答案3

我不会使用 ifconfig,因为至少在某些发行版中它被 ip 取代。

如果你知道你的界面你可以这样做:

ip 地址 |grep eth0 |grep inet |awk'{打印 $2}'

它还会给你一个面具,你可以像这样剪掉它。

ip 地址 |grep eth0 |grep inet |awk'{打印 $2}'|cut -d“/”-f 1

我假设您使用 bash 编写脚本。如果您使用其他语言,您也可以获取主机名并查找其 IP。

相关内容