Con CIDR (Classless Inter Domain Routing) el concepto de clase anterior se ha ido. En su lugar, crea sus redes configurando la máscara de subred adecuada y su enrutamiento. Tanto para la historia. :-)
Como mi Yosemite produce máscaras de red en ifconfig en hexadecimal, escribí un script de shell que analiza toda la salida de ifconfig y calcula la red a partir de ella. Tal vez usted podría modificar eso a sus necesidades. Una salida de muestra sería:
IP adress: 127.0.0.1 Netmask: 255.0.0.0 Network: 127.0.0.0
IP adress: 172.20.41.52 Netmask: 255.255.255.0 Network: 172.20.41.0
IP adress: 172.16.47.1 Netmask: 255.255.255.0 Network: 172.16.47.0
IP adress: 192.168.97.1 Netmask: 255.255.255.0 Network: 192.168.97.0
Aquí está el script; omite las direcciones inet6 de ifconfig y se relaciona solo con IPv4:
#!/bin/sh
IP="'ifconfig -a | fgrep 'inet ' | sed -e 's/^.*netmask:\(.*\)$//g' -e 's/^.*inet\ \([^\ ]*\)\ .*$//''"
convert_hex_netmask_to_dec () {
nh=$1
nd=$(($nh % 0x100))
for i in 1 2 3
do
((nh = nh / 0x100))
nd="$((nh % 0x100)).$nd"
done
echo $nd
# See more at: http://compgroups.net/comp.unix.shell/convert-hex-to-decimal/497395#sthash.ShzT161v.dpuf
}
for ipadress in ${IP}
do
netmaskhex="'ifconfig -a | fgrep 'inet ' | grep ${ipadress} | awk '{print $4}''"
netmaskdec="'convert_hex_netmask_to_dec ${netmaskhex}'"
IFS=. read -r i1 i2 i3 i4 <<< "${ipadress}"
IFS=. read -r m1 m2 m3 m4 <<< "${netmaskdec}"
NET="'printf \"%d.%d.%d.%d\n\" \"$((i1 & m1))\" \"$(($i2 & m2))\" \"$((i3 & m3))\" \"$((i4 & m4))\"'"
printf "IP adress:%15s Netmask:%15s Network:%15s\n" ${ipadress} ${netmaskdec} ${NET}
done
Si solo desea el primer octeto de la red, simplemente deshabilite el printf final y sustitúyalo por
printf "%d\n" "$((i1 & m1))"