#!/bin/bashfunction dec2bin () # converter for a $1 number from decimal number system binary with $2 bits width
{
value=$1
base=2
number_plates=$(($2-1))
result=""
i=0
[ $value -eq 0 ] && result="0"
while [ $value -gt 0 ]
do
reminder=$((${value}%${base}))
value=$((${value}/${base}))
result="$reminder$result"
i=$(($i+1))
done
for i in $(seq 0 $number_plates) ; do
[ -z ${result:$i:1} ] && result="0$result"
done
echo -n "$result"
}
function ip2dec () # $1 is IPv4, output is the ip decimal value
{
arg_ip=$1
# split to octets; octet1 is left, octet4 is right
octet1="${arg_ip%%.*}" ; arg_ip="${arg_ip#*.}"
octet2="${arg_ip%%.*}" ; arg_ip="${arg_ip#*.}"
octet3="${arg_ip%%.*}" ; arg_ip="${arg_ip#*.}"
octet4="${arg_ip%%.*}"
# get single number decimal ip; catenate binary value into single binary number; BASh arithmetic is decimal... value will be auto-converted
(( arg_ip=2#$( dec2bin ${octet1} 8 )$( dec2bin ${octet2} 8 )$( dec2bin ${octet3} 8 )$( dec2bin ${octet4} 8 ) ))
echo -n "${arg_ip}"
}
ip_first="192.168.0.0"
ip_last="192.168.0.3"
# get single number decimal ip
the_ip=$( ip2dec ${ip_first} )
ip_last=$(( $( ip2dec ${ip_last} ) + 1 ))
while [ "${the_ip}" != "${ip_last}" ] ; do
#echo -e "\nDecimal:\t${the_ip}"
#echo -e "Binary:\t\t$( dec2bin ${octet1} 8 )$( dec2bin ${octet2} 8 )$( dec2bin ${octet3} 8 )$( dec2bin ${octet4} 8 )"
ip_to_print=$( dec2bin ${the_ip} 32 )
(( octet1=2#${ip_to_print:0:8} ))
(( octet2=2#${ip_to_print:8:8} ))
(( octet3=2#${ip_to_print:16:8} ))
(( octet4=2#${ip_to_print:24:8} ))
echo -e "4 octet:\t${octet1}.${octet2}.${octet3}.${octet4}"
((the_ip++))
done