20

我正在使用 bash 通过该脚本获取我的机器的 IP 地址:

_MyGW="$( ip route get 8.8.8.8 | awk 'N=3 {print $N}' )"

现在我正在尝试获取这种类型的子网掩码:

192.168.1.0/24 

但我不知道我该怎么做。

4

4 回答 4

38

有几种方法可以实现这一点:

首先:要以 255.255.255.0 格式打印掩码,您可以使用以下命令:

/sbin/ifconfig wlan0 | awk '/Mask:/{ print $4;} '

第二:我们可以使用 ip 命令获取格式为 192.168.1.1/24 的掩码

ip -o -f inet addr show | awk '/scope global/ {print $4}'
于 2015-10-15T14:05:06.983 回答
1

更好的方法是:

 ifconfig eth0 | awk '/netmask/{split($4,a,":"); print a[1]}'

您可以将 eth0 替换为您想要的任何其他接口

于 2017-12-20T14:41:47.843 回答
1

为我做这件事的一个简单方法是:

IP=$(ifconfig eth0 | grep -w inet | cut -d" " -f10) # device IP, e.g. 11.1.1.43
IP_RANGE=$(echo $IP | cut -d"." -f1-3).0/24 # subnet 11.1.1.0/24

当然替换为eth0显示的正确界面ifconfig

于 2021-07-10T10:43:02.627 回答
0

这就是我使用 bash/awk 获取 IP 和子网掩码的方式:

IFCONFIG=$(ifconfig eth0)
IPETH=$(echo "$IFCONFIG" | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
MASK=$(echo "$IFCONFIG" | awk '/Mask/{split($4,a,":"); split(a[2],m,"."); h=m[1]*16777216+m[2]*65536+m[3]*256+m[4]; s=0; for(i=0; i < 32; i++) { s+=and(h,1); h/=2 } print s; }')
echo ${IPETH}/${MASK}

根据您的版本,ifconfig您必须使用/Mask//netmask/获取子网掩码。我需要这个有点摆弄,因为我ip的系统上没有。

这给了我例如

172.29.11.12/24
于 2022-01-20T08:54:13.977 回答