#
# printerwalk.sh
#
# My crappy little shell script to walk printers and print out a 
# very simple report.  This needs to be integrated with libPJL
# from FX to provide more useful information, or even drop a
# file on every printer.
#
# Author: Paul Asadoorian (paul@pauldotcom.com)
# Web: http://pauldotcom.com
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
#

#!/bin/bash

if [ -z "$1" ]; then
        echo ""
        echo "Error: Please specify a Community String and IP address."
        echo ""
        echo "printerwalk.sh <Community String> <IP Address> [desc|all]"
        echo ""
        echo "By default printerwalk will grab just the description MIB (sysDescr.0)"
        exit 1
fi

COMMUNITY=$1
IP_SUBNET=$2
if [ -z $1 ]; then

        TYPE=desc
else
        TYPE=$3
fi

count=1

# Find all hosts listening on SNMP
nmap -n -oG /tmp/snmp.out -T aggressive -sU -p161 $IP_SUBNET.1-254 >/tmp/nmap.out  2>&1

# snmpwalk all the hosts listening on port 161
awk '{print $2}' /tmp/snmp.out  | grep -vi nmap > /tmp/snmpip.out

# Do the walkin
if [ $TYPE = "desc" ]; then

        awk '{ print "echo IP: " $1 " ; " "snmpwalk -Oq -Cc -r0 -t2 -v1 -c '$COMMUNITY' " $1 " iso.3.6.1.2.1.1.1.0 "}' /tmp/snmpip.out | sh
else

awk '{ print "echo ----- " $1 " ----- ; snmpwalk -Cc -Ov -r0 -t2 -v1 -c '$COMMUNITY' " $1 " ; snmpwalk -Cc -r0 -t2 -v1 -c '$COMMUNITY' " $1}' /tmp/snmpip.out | sh

fi

# clean-up
rm /tmp/snmp.out
rm /tmp/nmap.out
rm /tmp/snmpip.out

