#!/bin/bash
# Network Information Script
#
# Project Idea and Developer: Joel Leclerc (lkjoel)
# Other Developers:

#############################################
## Variables used by this script
#############################################
export green='\e[0;32m'
export boldgreen='\e[1;32m'
export red='\e[0;31m'
export boldred='\e[1;31m'
export yellow='\e[0;33m'
export boldyellow='\e[1;33m'
export endcolor='\e[0m'
export DIALOG=dialog
export CALL=0
export NOC=27

#############################################
## Functions used by this script
#############################################

## Check if a binary is installed
checkbin() (
  export RETURNCODE=1
  IFS=:
  for i in $PATH
  {
    [ -e $i/$1 ] && RETURNCODE=0
  }
  return $RETURNCODE
)

## Graphical way to check for a binary
graphicbin() {
  if [ $# -lt 3 ]
  then
    app=$1
    package=$2
    set $app $app $package
  fi
  export RETURNCODE=1
  checkbin $1
  if [ $? -eq 0 ]
  then
    echo -e "Checking for $2 ...\t [${green}  OK  ${endcolor}]"
    RETURNCODE=0
  else
    echo -e "Checking for $2 ...\t [${red} FAIL ${endcolor}]"
    echo "Please install $1, available in $3"
    exit $RETURNCODE
  fi
  return $RETURNCODE;
}

## Percentage Meter
percent() {
  export COLS=$(($COLUMNS-3))
  export INCREASE=$(($COLS/$1))
  export DONE=1
  export FINISHED=$1
  helper1() {
    export DONEH1=1
    export COUNT=0
    export SPACE=0
    export TOTALCOUNT=$1
    echo -n "["
    while [ $DONEH1 -eq 1 ]
    do
      if [ $TOTALCOUNT -eq $COUNT ]
      then
        if [ $SPACE -ge $COLS ]
        then
          DONEH1=0
        else
          echo -n " "
          SPACE=$(($SPACE+1))
        fi
      else
        echo -n "="
        COUNT=$(($COUNT+1))
      fi
    done
    echo -n "]"
  }
  printf "\r"
  helper1 0
}

## Finish the percentage bar
percentfinish() {
  export COLS=$(($COLUMNS-3))
  DONE=1
  CURRENTNUM=0
  printf "\r"
  echo -n "["
  while [ $DONE -eq 1 ]
  do
    if [ $CURRENTNUM -eq $COLS ]
    then
      DONE=0
    else
      echo -n "="
      CURRENTNUM=$(($CURRENTNUM+1))
    fi
  done
}

## Percentage Updater
percentupd8() {
  export COLS=$(($COLUMNS-3))
  tempans=$1
  export INCREASE=$(($COLS/$tempans))
  export DONE=1
  export FINISHED=$tempans
  helper1() {
    export DONEH1=1
    export COUNT=0
    export SPACE=0
    export TOTALCOUNT=$1
    export COOLS=$2
    echo -n "["
    while [ $DONEH1 -eq 1 ]
    do
      if [ $TOTALCOUNT -eq $COUNT ]
      then
        if [ $SPACE -ge $COLS ]
        then
          DONEH1=0
        else
          echo -n " "
          SPACE=$(($SPACE+1))
        fi
      else
        echo -n "="
        COUNT=$(($COUNT+1))
        SPACE=$(($SPACE+1))
      fi
    done
    echo -n "]"
  }
  helper2() {
    export ANS=0
    export DONEH2=1
    export CURRENTNUM=0
    export NUM=$1
    while [ $DONEH2 -eq 1 ]
    do
      if [ $CURRENTNUM -eq $NUM ]
      then
        DONEH2=0
      else
        ANS=$(($ANS+$INCREASE))
        CURRENTNUM=$(($CURRENTNUM+1))
      fi
    done
    echo $ANS
  }
  if [ $tempans -eq $2 ]
  then
    percentfinish
  else
    printf "\r"
    helper1 `helper2 $2`
  fi
}

#############################################
## Ask for user password
#############################################

echo -n "[sudo] password for `whoami`: "
stty -echo
read PASSWD
stty echo
echo
export PASSWD
echo "$PASSWD" | sudo -k -S printf "" > /dev/null 2>&1
if [ $? -eq 1 ]
then
echo "Sorry, try again."
echo -n "[sudo] password for `whoami`: "
stty -echo
read PASSWD
stty echo
echo
export PASSWD
echo "$PASSWD" | sudo -k -S printf "" > /dev/null 2>&1
if [ $? -eq 1 ]
then
echo "Sorry, try again."
echo -n "[sudo] password for `whoami`: "
stty -echo
read PASSWD
stty echo
echo
export PASSWD
echo "$PASSWD" | sudo -k -S printf "" > /dev/null 2>&1
if [ $? -eq 1 ]
then
echo "sudo: 3 incorrect password attempts"
exit 1
fi
fi
fi

#############################################
## Check for applications needed
#############################################

graphicbin tput "tput   " ncurses-bin
graphicbin tempfile debianutils
graphicbin sudo "sudo   " sudo
graphicbin ifconfig net-tools
graphicbin iwconfig wireless-tools
graphicbin iwlist "iwlist " wireless-tools
graphicbin lshw "lshw   " lshw
graphicbin ping "ping   " iputils-ping
graphicbin nm-tool network-manager
graphicbin uname "uname  " coreutils
graphicbin bzip2 "bzip2  " bzip2
graphicbin cat "cat    " coreutils
graphicbin rfkill "rfkill " rfkill
graphicbin lspci "lspci  " pciutils
graphicbin lsb_release lsb-release
graphicbin lsmod "lsmod  " module-init-tools
graphicbin lsusb "lsusb  " usbutils
graphicbin dmesg "dmesg  " util-linux
graphicbin ip "ip     " iproute
graphicbin sed "sed    " sed
graphicbin cut "cut    " coreutils
graphicbin gawk "gawk   " gawk
graphicbin lzma "lzma   " lzma

#############################################
## Get info
#############################################
tput init
export COLUMNS=`tput cols`
export tempfile=`tempfile 2>/dev/null` || export tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 1
export tempfile2=`tempfile 2>/dev/null` || export tempfile=/tmp/test$$
trap "rm -f $tempfile2" 0 1 2 5 1
echo "Gathering information..."
percent $NOC
export NOCCOUNT=1
echo '#############################################################################' >> $tempfile
echo '############# All of the commands done below are done with sudo #############' >> $tempfile
echo '#############################################################################' >> $tempfile
echo >> $tempfile
echo >> $tempfile
echo '#############  /etc/init.d/networking restart  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S /etc/init.d/networking restart >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  ifconfig  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S ifconfig >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  iwconfig  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S iwconfig >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  iwlist scan  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S iwlist scan >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  lshw  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S lshw >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  nm-tool  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S nm-tool >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  uname -a  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S uname -a >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  lspci -vvvnn  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S lspci -vvvnn >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  DRIVERS  #############' >> $tempfile
TEMPTEMP=`tempfile`
echo "$PASSWD" | sudo -k -S lspci -nn 2>&1 | grep "02[80]0" | cut -d " " -f 1 2>/dev/null > $TEMPTEMP
driver=""
for i in `cat $TEMPTEMP`
do
  echo "$PASSWD" | sudo -k -S lspci -vvvs $i 2>&1 | grep "Kernel driver in use:" | gawk -F: '{print $2}' | sed 's:^ *::g' | sed 's: *$::g' >> $tempfile 2>&1
done
rm -rf $TEMPTEMP
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  lsb_release -a  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S lsb_release -a >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  cat /etc/network/interfaces  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S cat /etc/network/interfaces >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  rfkill list all  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S rfkill list all >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  lsmod  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S lsmod >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  lsusb -v  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S lsusb -v >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  cat /var/log/syslog | grep etwork  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S cat /var/log/syslog 2>&1 | grep etwork >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  cat /etc/resolv.conf  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S cat /etc/resolv.conf >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  cat /proc/net/wireless  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S cat /proc/net/wireless >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  cat /etc/modprobe.d/blacklist.conf  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S cat /etc/modprobe.d/blacklist.conf >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  cat /etc/modules  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S cat /etc/modules >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  ls -la /lib/firmware/  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S ls -la /lib/firmware/ >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  cat /var/lib/NetworkManager/NetworkManager.state  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S cat /var/lib/NetworkManager/NetworkManager.state >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  ip addr  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S ip addr >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  ip maddr  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S ip maddr >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  ping -c 5 8.8.8.8  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S ping -c 5 8.8.8.8 >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  ping -c 5 8.8.4.4  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S ping -c 5 8.8.4.4 >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
echo '#############  ping -c 5 google.com  #############' >> $tempfile
echo "$PASSWD" | sudo -k -S ping -c 5 google.com >> $tempfile 2>&1
percentupd8 $NOC $NOCCOUNT
NOCCOUNT=$(($NOCCOUNT+1))
percentfinish
echo

##############################################
## Clean up and move file
##############################################
echo "Cleaning and compressing..."
sed -i "s/\[sudo\] password for `whoami`: //g" $tempfile
mv $tempfile NETWORK-INFO.txt
lzma -z -f -9 NETWORK-INFO.txt
bzip2 -9 -f -z NETWORK-INFO.txt.lzma

##############################################
## Show the user that it is finished
##############################################
echo
echo "Network Information has been gathered into NETWORK-INFO.txt.lzma.bz2"
echo
echo "To uncompress information:"
echo "bunzip2 NETWORK-INFO.txt.lzma.bz2; unlzma NETWORK-INFO.txt.lzma"
echo