#!/bin/bash
# Copyright 2017 Lucid Networks sloeckle
# Package Version 0.12-0.4 - Script Version 4

getcidr() {
    nbits=0
    IFS=.
    for dec in $1 ; do
        case $dec in
            255) let nbits+=8;;
            254) let nbits+=7;;
            252) let nbits+=6;;
            248) let nbits+=5;;
            240) let nbits+=4;;
            224) let nbits+=3;;
            192) let nbits+=2;;
            128) let nbits+=1;;
            0);;
        esac
    done
    echo "$nbits"
}
export DISPLAY=:0
IP=$(ip addr | awk '/inet/ && /eth0/{sub(/\/.*$/,"",$2); print $2}')
NETMASK=$(ifconfig eth0 | sed -rn '2s/ .*:(.*)$/\1/p')
CIDR=$(getcidr $NETMASK)
IFS=. read -r i1 i2 i3 i4 <<< "$IP"
IFS=. read -r m1 m2 m3 m4 <<< "$NETMASK"
NETWORK=$(printf "%d.%d.%d.%d\n" "$((i1 & m1))" "$((i2 & m2))" "$((i3 & m3))" "$((i4 & m4))")
NMAPFILE="discovery.nmap"
NECFILE="discovery.nec.output"
NEXPFILE="discovery.nexp.output"
SNAPFILE="discovery.snap.output"
BARCOFILE="discovery.barco.output"
APCFILE="discovery.apc.output"

#echo $IP
#echo $NETMASK
#echo $CIDR
#echo $NETWORK
echo
echo "Running network scan on $NETWORK/$CIDR. This may take several minutes. Please wait..."
nmap -sP -PS80 $NETWORK/$CIDR > $NMAPFILE &
pid=$!
trap "kill $pid 2> /dev/null" EXIT
while kill -0 $pid 2> /dev/null; do
  echo -n "."
  sleep 0.5
done
echo
trap - EXIT
echo "Scan completed"
grep 'report\|MAC' $NMAPFILE | sed '$!N;s/\n/ /' | awk 'BEGIN { OFS = " "; ORS = "\n\n" } {print $6, $9}' | grep -i 8C:DF > $NECFILE
grep 'report\|MAC' $NMAPFILE | sed '$!N;s/\n/ /' | awk 'BEGIN { OFS = " "; ORS = "\n\n" } {print $6, $9}' | grep -i 58:C2 >> $NECFILE
grep 'report\|MAC' $NMAPFILE | sed '$!N;s/\n/ /' | awk 'BEGIN { OFS = " "; ORS = "\n\n" } {print $6, $9}' | grep -i B8:AE > $NEXPFILE
grep 'report\|MAC' $NMAPFILE | sed '$!N;s/\n/ /' | awk 'BEGIN { OFS = " "; ORS = "\n\n" } {print $6, $9}' | grep -i F4:4D >> $NEXPFILE
grep 'report\|MAC' $NMAPFILE | sed '$!N;s/\n/ /' | awk 'BEGIN { OFS = " "; ORS = "\n\n" } {print $6, $9}' | grep -i D4:6A > $SNAPFILE
grep 'report\|MAC' $NMAPFILE | sed '$!N;s/\n/ /' | awk 'BEGIN { OFS = " "; ORS = "\n\n" } {print $6, $9}' | grep -i 00:04:A5 > $BARCOFILE
grep 'report\|MAC' $NMAPFILE | sed '$!N;s/\n/ /' | awk 'BEGIN { OFS = " "; ORS = "\n\n" } {print $6, $9}' | grep -i 00:C0:B7 > $APCFILE
rm -f $NMAPFILE
if [[ -s $NEXPFILE ]]; then
    echo
    echo "Found these NEXP devices:"
    echo
    cat -n $NEXPFILE
else
    echo
    echo "**** NO NEXP DEVICES FOUND! ****"
fi
rm -f $NEXPFILE
if [[ -s $NECFILE ]]; then
    echo
    echo "Found these NEC screens:"
    echo
    cat -n $NECFILE
    echo
#    read -t 10 -p "Load NEC ip addresses into Chrome tabs? (y/N) " choice
    case "$choice" in
        [y|Y]* )
            while IFS='' read -r line || [[ -n "$line" ]]; do
                necip=$(echo $line | awk '{ print $1 }')
                /usr/bin/google-chrome $necip
                echo "Loaded $necip"
            done < $NECFILE
            ;;
        * )
            echo
            ;;
    esac
else
    echo
    echo "**** NO NEC DISPLAYS FOUND! ****"
fi
# rm -f $NECFILE
if [[ -s $SNAPFILE ]]; then
    echo
    echo "Found these SNAPAV devices:"
    echo
    cat -n $SNAPFILE
    echo
#    read -t 10 -p "Load SNAPAV ip addresses into Chrome tabs? (y/N) " choice
    case "$choice" in
        [y|Y]* )
            while IFS='' read -r line || [[ -n "$line" ]]; do
                snapip=$(echo $line | awk '{ print $1 }')
                /usr/bin/google-chrome $snapip
            done < $SNAPFILE
            ;;
        * )
            echo
            ;;
    esac
else
    echo
    echo "**** NO SNAPAV DEVICES FOUND! ****"
fi
rm -f $SNAPFILE
echo
if [[ -s $BARCOFILE ]]; then
    echo
    echo "Found these BARCOAV devices:"
    echo
    cat -n $BARCOFILE
    echo
#    read -t 10 -p "Load BARCOAV ip addresses into Chrome tabs? (y/N) " choice
    case "$choice" in
        [y|Y]* )
            while IFS='' read -r line || [[ -n "$line" ]]; do
                snapip=$(echo $line | awk '{ print $1 }')
                /usr/bin/google-chrome $snapip
            done < $BARCOFILE
            ;;
        * )
            echo
            ;;
    esac
else
    echo
    echo "**** NO BARCO DEVICES FOUND! ****"
fi
rm -f $BARCOFILE
echo
if [[ -s $APCFILE ]]; then
    echo
    echo "Found these APCAV devices:"
    echo
    cat -n $APCFILE
    echo
#    read -t 10 -p "Load APCAV ip addresses into Chrome tabs? (y/N) " choice
    case "$choice" in
        [y|Y]* )
            while IFS='' read -r line || [[ -n "$line" ]]; do
                snapip=$(echo $line | awk '{ print $1 }')
                /usr/bin/google-chrome $snapip
            done < $APCFILE
            ;;
        * )
            echo
            ;;
    esac
else
    echo
    echo "**** NO APC DEVICES FOUND! ****"
fi
rm -f $APCFILE
echo
