Получить маску подсети в 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.

Другие вопросы по тегам