Получить маску подсети в Linux с помощью bash
Я использую bash для получения IP-адреса моей машины с помощью этого скрипта:
_MyGW="$( ip route get 8.8.8.8 | awk 'N=3 {print $N}' )"
И теперь я пытаюсь получить маску подсети в таком виде:
192.168.1.0/24
Но я понятия не имею, как я могу это сделать.
5 ответов
Есть несколько способов добиться этого:
Во-первых: чтобы напечатать маску в формате 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 '/Mask:/{split($4,a,":"); print a[2]}'
Вы можете заменить eth0 любым другим интерфейсом, который хотите
ИНТЕРФЕЙС=$(ip -o -f inet route |grep -e "^default" |awk '{print $5}')
echo $(ip -o -f inet addr show | grep "$INTERFACE" | awk '/scope global/ {print $4}')
Вот как я получаю IP-адрес и маску подсети с помощью bash/awk:
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
Для меня это был простой способ:
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
.