Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- usage="$(basename "$0") [OPTIONS] -- program to retrieve network devices and show IP address paired with the device name
- where:
- -h show this help text
- -i set the IP interface to check (default: 1) - check available IPs list with [-l] option
- -l list the available IP addresses
- -a show all network IPs, even if no computer name is found
- -m show MAC address
- -b show devices brand when no other information is available (if nmap installed and if can be found)"
- myip=1
- shownoname=false
- showmac=false
- showbrand=false
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- ORANGE='\033[0;33m'
- NC='\033[0m'
- while getopts ':halmbi:' option; do
- case "$option" in
- h) echo "$usage"
- exit 0
- ;;
- a) shownoname=true
- ;;
- l) sudo nm-tool | grep -i 'address' | grep -Po '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | nl -n 'ln'
- exit 0
- ;;
- m) showmac=true
- ;;
- b) showbrand=true
- ;;
- i) myip=$OPTARG
- if [ -z $(sudo nm-tool | grep -i 'address' | grep -Po '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sed -n "$myip"p) ]; then
- echo "there is no such interface, try the [-l] option"
- exit 1
- fi
- ;;
- :) printf "missing argument for -%s\n" "$OPTARG" >&2
- exit 1
- ;;
- \?) printf "illegal option: -%s\n" "$OPTARG" >&2
- exit 1
- ;;
- esac
- done
- shift $((OPTIND - 1))
- # get if nmap is installed
- nmapInstalled=$(whereis nmap)
- if [ -z "$nmapInstalled" ]; then
- showbrand=false
- fi
- maxwait=0.1;
- # get starter IP address
- IFS=. read -r i1 i2 i3 i4 <<< $(sudo nm-tool | grep -i 'address' | grep -Po '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sed -n "$myip"p)
- IFS=. read -r m1 m2 m3 m4 <<< $(sudo nm-tool | grep -i 'prefix' | grep -Po '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sed -n "$myip"p)
- si1=$(($i1 & $m1))
- si2=$(($i2 & $m2))
- si3=$(($i3 & $m3))
- si4=$(($i4 & $m4))
- # get my HW address
- myhwaddr=$(ifconfig | grep -B 1 "$i1.$i2.$i3.$i4" | grep -oP '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})' | sed -n "$myip"p)
- # get number of IPs in network
- iprange=$(sudo nm-tool | grep -i 'prefix' | grep -Po '\s[0-9]+' | grep -Po '[0-9]+' | sed -n "$myip"p)
- iprange=$(( 2**(32-$iprange) -1 ))
- # cycle through IPs
- for((i=1;i<$iprange;i++)); do
- # calulate IP
- ci4=$(($si4 + $i))
- ci3=$(($si3 + ($ci4 / 256) )); ci4=$(($ci4 % 256))
- ci2=$(($si2 + ($ci3 / 256) )); ci3=$(($ci3 % 256))
- ci1=$(($si1 + ($ci2 / 256) )); ci2=$(($ci2 % 256))
- # get computer name
- result=$(timeout $maxwait nmblookup -A "$ci1.$ci2.$ci3.$ci4" | sed -n 2p | grep -Po '\t.+?\s' | xargs)
- hwaddress=$(arp "$ci1.$ci2.$ci3.$ci4" | grep -Po '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})')
- if [ -z "$result" ] && [ ! -z "$hwaddress" ] && [ $shownoname == true ]; then
- result="???"
- fi
- # print if response given
- if [ ! -z "$result" ]; then
- toprint="$ci1.$ci2.$ci3.$ci4"
- if [ $showmac == true ]; then
- if [ -z "$hwaddress" ]; then
- hwaddress=$myhwaddr
- fi
- toprint="$toprint ( $hwaddress )"
- fi
- myhost=$(grep "$ci1.$ci2.$ci3.$ci4" /etc/hosts | grep -oP '\s.+' | xargs)
- if [ ! -z "$myhost" ]; then
- result="$result ( ${GREEN}$myhost${NC} )"
- fi
- if [ "$ci1.$ci2.$ci3.$ci4" == "$i1.$i2.$i3.$i4" ]; then
- result="$result ( ${RED}THIS DEVICE${NC} )"
- fi
- # if nothing found and nmap installed get device brand
- if [ "$result" == "???" ] && [ $showbrand == true ]; then
- result=$(sudo nmap -sP "$ci1.$ci2.$ci3.$ci4" | grep 'MAC Address' | grep -Po '\(.+?\)')
- if [ "$result" == "(Unknown)" ]; then
- result="???"
- else
- result="??? ${ORANGE}$result${NC}"
- fi
- fi
- echo -e "$toprint\t=>\t$result"
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment