![如果 IP 的大小随着每次连接而变化,我该如何使用脚本从 ifconfig 获取 IP 地址?](https://linux22.com/image/989478/%E5%A6%82%E6%9E%9C%20IP%20%E7%9A%84%E5%A4%A7%E5%B0%8F%E9%9A%8F%E7%9D%80%E6%AF%8F%E6%AC%A1%E8%BF%9E%E6%8E%A5%E8%80%8C%E5%8F%98%E5%8C%96%EF%BC%8C%E6%88%91%E8%AF%A5%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%84%9A%E6%9C%AC%E4%BB%8E%20ifconfig%20%E8%8E%B7%E5%8F%96%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我目前正在研究这个
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。