Files
claudio 368d6fafea Issue
Code backup
2026-05-10 16:59:01 +02:00

235 lines
6.1 KiB
Bash

#!/bin/bash
# - VAR
# - Bash info
APPNAME=$(basename $0)
NAME="Check Switch HPE OfficeConnect 1920s"
AUTHOR="Kalarumeth"
VERSION="v0.1"
URL="https://github.com/Kalarumeth"
# - Default settings for connection
COMMUNITY="public"
HOST_NAME="localhost"
SNMPVERSION="2c"
# - State Variables
STATE_OK=0
STATE_WARN=1
STATE_CRIT=2
STATE_UNK=3
STATE=$STATE_OK
# - OID
HPE.OIDS() {
#Info
OID_sysDescr="1.3.6.1.2.1.1.1.0"
OID_sysUptimeIstance="1.3.6.1.2.1.1.3"
OID_sysSerial="1.3.6.1.2.1.47.1.1.1.1.11.1"
OID_sysMacAddres="1.3.6.1.2.1.67.1.2.1.1.2.0"
#interface
OID_ifName="1.3.6.1.2.1.31.1.1.1.1"
OID_ifInErrors="1.3.6.1.2.1.2.2.1.14"
OID_ifOutErrors="1.3.6.1.2.1.2.2.1.20"
#Vlan
OID_vlanID="1.3.6.1.2.1.17.7.1.4.2.1.3.0"
OID_vlanName="1.3.6.1.2.1.17.7.1.4.3.1.1"
OID_vlanEntry="1.3.6.1.2.1.17.7.1.2.1.1.2"
}
# - MAIN CODE
Script.HostAlive() {
for server in $HOST_NAME; do
ping -c1 -W1 -q $server &>/dev/null
if [[ $? != 0 ]] ; then
printf "%s\n" "$server is unreachable"
exit $STATE_UNK
fi
done
}
Script.SNMP() {
snmpwalk -v $SNMPVERSION -r 1 -t 10 -Oe -c $COMMUNITY $HOST_NAME $1
}
Script.SNMP.Hex() {
snmpwalk -v $SNMPVERSION -r 1 -t 10 -Oa -c $COMMUNITY $HOST_NAME $1
}
# - Switch HPE OfficeConnect 1920s Health Check
HPE.Main() {
Script.HostAlive
case $1 in
info)
HPE.Info
exit $STATE ;;
if)
HPE.Interface
exit $STATE ;;
vlan)
HPE.Vlan
exit $STATE ;;
*)
echo "Unknown check!"
Help.HPE
exit $STATE_UNK ;;
esac
}
HPE.GetData() {
HPE.OIDS
case $1 in
info)
raw_sysDescr=$(Script.SNMP $OID_sysDescr | cut -d '"' -f 2)
IFS=',' read -ra sysDescr <<< $raw_sysDescr;
sysUptimeIstance=$(Script.SNMP $OID_sysUptimeIstance | cut -d ')' -f 2 )
sysSerial=$(Script.SNMP $OID_sysSerial | cut -d '"' -f 2)
sysMacAddres=$(Script.SNMP $OID_sysMacAddres | cut -d '"' -f 2);;
interface)
raw_ifName=$(Script.SNMP $OID_ifName | cut -d ' ' -f 4)
raw_ifInErrors=$(Script.SNMP $OID_ifInErrors | cut -d ' ' -f 4)
raw_ifOutErrors=$(Script.SNMP $OID_ifOutErrors | cut -d ' ' -f 4)
readarray -t ifName <<< $raw_ifName
readarray -t ifInErrors <<< $raw_ifInErrors
readarray -t ifOutErrors <<< $raw_ifOutErrors ;;
vlan)
raw_vlanID=$(Script.SNMP $OID_vlanID | cut -d ' ' -f 4 | sed "s/$//g")
raw_vlanName=$(Script.SNMP $OID_vlanName | cut -d '"' -f 2 | sed "s/$//g")
raw_vlanEntry=$(Script.SNMP $OID_vlanEntry | cut -d ' ' -f 4 | sed "s/$//g")
readarray -t vlanID <<< $raw_vlanID
readarray -t vlanName <<< $raw_vlanName
readarray -t vlanEntry <<< $raw_vlanEntry ;;
esac
}
HPE.Info() {
HPE.GetData info
printf "%s\n\n" "${sysDescr[0]}"
printf "%s\t%s\n" "UpTime:" "$sysUptimeIstance"
printf "%s\t%s\n" "S/N:" " $sysSerial"
printf "%s\t%s\n" "Relase:" "${sysDescr[1]}"
printf "%s\t%s\n" "Os:" "${sysDescr[2]}"
printf "%s\t%s\n" "Bios:" "${sysDescr[3]}"
printf "%s\t%s\n" "Mac:" " $sysMacAddres"
}
HPE.Interface() {
HPE.GetData interface
ErrorCounter=0
for ((i=0; i<${#ifName[@]}; i++));
do
if [[ ${ifInErrors[$i]} != 0 || ${ifOutErrors[$i]} != 0 ]]; then
ErrorCounter=$((ErrorCounter + 1))
fi
done
for Error in "$ErrorCounter"; do
if [[ $Error == 0 ]] ; then
printf "%s\t%s\n\n" "OK!" "All interface operating normally."
break
else
printf "%s\n\n" "Warn! $ErrorCounter inteface have error."
printf "%s\t%s\t%s\n" "InEr" "OutEr" "If"
printf "%s\n" "========================="
for ((i=0; i<${#ifName[@]}; i++));
do
if [[ ${ifInErrors[$i]} != 0 || ${ifOutErrors[$i]} != 0 ]] ; then
printf "%s\t%s\t%s\n" "${ifInErrors[$i]}" "${ifOutErrors[$i]}" "${ifName[$i]}"
fi
done
STATE=$STATE_WARN
break
fi
done
}
HPE.Vlan() {
HPE.GetData vlan
printf "%s\n\n" "${#vlanID[@]} Exist Vlan"
printf "%s\t%s\t%s\n" "ID" "Entry" "Name"
printf "%s\n" "============================="
for ((i=0; i<${#vlanID[@]}; i++))
do
printf "%s\t%s\t%s\n" "${vlanID[$i]}" "${vlanEntry[$i]}" "${vlanName[$i]}"
done
}
# - Help
Help.Main() {
echo $NAME
echo ''
Help.Usage
echo ''
Help.Option
echo ''
Help.Info
echo ''
exit $STATE_UNK
}
Help.Usage() {
printf "%s\n" "Method to compose the execution string"
printf "%s\n" "./$APPNAME -c <SNMP community> -h <host>"
}
Help.Option() {
printf "%s\n" "OPTIONS:"
printf "%s\t%s\t%s\n\t\t\t%s\n" "-c" "--community" "SNMP v2 community string with Read access." " Default is $COMMUNITY."
printf "%s\t%s\t\t%s\n\t\t\t%s\n" "-h" "--host" "Host name or IP address to check." " Default is $HOST_NAME."
printf "%s\t%s\t\t%s\n" "-H" "--help" "Show script help"
printf "%s\t%s\t%s\n" "-V" "--version" "Show script version"
}
Help.HPE() {
printf "\n%s\n\n" "HPE OfficeConnect 1920s Check Function"
printf "%s\t%s\n\n" "Check" "Description"
printf "%s\t%s\n" "info" "Print Switch basic information"
printf "%s\t%s\n" "if" "Monitoring interface"
printf "%s\t%s\n" "vlan" "Monitoring Vlan"
}
Help.Info() {
printf "%s\t%s\t%s\n" "INFO:" "$NAME" "$VERSION" "" "$AUTHOR" "$URL"
}
# - COMMAND LINE ENCODER
while test -n "$1"; do
case "$1" in
--host | -h)
HOST_NAME=$2
shift ;;
--comunity | -c)
COMMUNITY=$2
shift ;;
--type | -t)
HPE.Main $2
shift ;;
--help | -H)
Help.Main ;;
--version | -V)
Help.Info
exit $STATE ;;
*)
echo "Unknown argument: $1"
print_help
exit $STATE_UNK ;;
esac
shift
done
HPE.Main