我正在使用 bash 通过该脚本获取我的机器的 IP 地址:
_MyGW="$( ip route get 8.8.8.8 | awk 'N=3 {print $N}' )"
现在我正在尝试获取这种类型的子网掩码:
192.168.1.0/24
但我不知道我该怎么做。
我正在使用 bash 通过该脚本获取我的机器的 IP 地址:
_MyGW="$( ip route get 8.8.8.8 | awk 'N=3 {print $N}' )"
现在我正在尝试获取这种类型的子网掩码:
192.168.1.0/24
但我不知道我该怎么做。
有几种方法可以实现这一点:
首先:要以 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}'
更好的方法是:
ifconfig eth0 | awk '/netmask/{split($4,a,":"); print a[1]}'
您可以将 eth0 替换为您想要的任何其他接口
为我做这件事的一个简单方法是:
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
。
这就是我使用 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