#!/bin/sh
# $Id$


if [ "$1" = "-h" -o "$1" = "--help" ];then
    echo "This script will find all servers in subnet with this one"
    exit 1
fi

ip2bin () {
    for e in `echo "$1" | tr '.' ' '`; do
        #printf "%8s" `echo "obase=2;ibase=10;$e" | bc | tr ' ' '0'`
        printf "%8s" `echo "obase=2;ibase=10;$e" | bc`|  tr ' ' '0'
    done
}
bin2ip () {
    digits="`echo $1 | egrep -o '[01]{8}'`"
    for d in $digits; do
        printf "%s." `echo "obase=10;ibase=2;$d" | bc`
    done | sed 's/.$//'
}

for i in `ifconfig -l -u`;do
    if [ "`ifconfig $i inet | grep '127\.0\.0\.'`" = "" ]; then
        ip="`ifconfig $i inet | egrep -o 'inet ([0-9]*.){3}[0-9]*' | awk '{print $2}'`"
        mask="`ifconfig $i inet | egrep -o 'netmask 0x[a-f0-9]*' | awk -Fx '{print $2}' | tr "[:lower:]" "[:upper:]"`"
        bip=`ip2bin $ip`
        bmask=`echo -e "obase=2;ibase=16;$mask" | bc`
        masklen=`echo "$bmask" | grep -o '0*$' | tr -d '[:blank:][:space:]' | wc -c | tr -d '[:blank:][:space:]'`
        prefixlen=$((32-$masklen))
        prefix="`echo $bip | egrep -o '^[01]{'$prefixlen'}' | head -1`"
        numhosts=`echo "obase=10;2^($masklen)-2" | bc`
        for i in `jot $numhosts`;do
             masktail=$(printf "%${masklen}s" `echo "obase=2;$i" | bc` | tr ' ' '0')
             rip=`bin2ip $prefix$masktail`
             chost="`host $rip | grep -v 'not found' | awk '{print $5}'`"
             if [ -n "$chost" ]; then
                 printf "%s :\t %s\n" "`hostname -s`" "$chost"
             fi
        done

    fi
done

