Con CIDR (Classless Inter Domain Routing) el viejo concepto de clase se ha ido. En lugar de crear sus redes a través de la configuración de la máscara de subred adecuada y su enrutamiento. Tanto para la historia. :-)
Como mi Yosemite salidas de máscaras de red en ifconfig en hexadecimal, escribí un script de shell que todos los análisis ifconfig salida y se calcula de la red a partir de ella. Tal vez usted podría modificar a sus necesidades. Un ejemplo de salida 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á la secuencia de comandos; omite inet6 direcciones de ifconfig y se refiere únicamente a IPv4:
#!/bin/sh
IP="`ifconfig -a | fgrep 'inet ' | sed -e 's/^.*netmask:\(.*\)$/\1/g' -e 's/^.*inet\ \([^\ ]*\)\ .*$/\1/'`"
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 desea que sólo el primer octeto de la red, sólo tiene que desactivar el final printf y reemplazarlo con
printf "%d\n" "$((i1 & m1))"