#!/bin/bash # - VAR # - Bash info APPNAME=$(basename $0) NAME="Check TplinkAp" 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 TpLink.OIDS() { OID_nameIF="1.3.6.1.2.1.2.2.1.2" OID_typeIF="1.3.6.1.2.1.2.2.1.3" OID_statusIF="1.3.6.1.2.1.2.2.1.8" OID_clientCon="1.3.6.1.4.1.11863.10.1.1.1" OID_arrayMac="1.3.6.1.4.1.11863.10.1.1.2.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 } # - TpLink AP Health Check TpLink.Main() { Script.HostAlive case $1 in client) TpLink.ClientConnected exit $STATE ;; if) TpLink.IF exit $STATE ;; *) echo "Unknown check!" Help.IPMI exit $STATE_UNK ;; esac } TpLink.GetData() { TpLink.OIDS case $1 in interface) nameIF=($(Script.SNMP $OID_nameIF | cut -d '"' -f 2 | sed "s/$//g")) statusIF=($(Script.SNMP $OID_statusIF | cut -d ' ' -f 4 | sed "s/$//g")) typeIF=($(Script.SNMP $OID_typeIF | cut -d ' ' -f 4 | sed "s/$//g")) ;; client) clientCon=$(Script.SNMP $OID_clientCon | cut -d ' ' -f 4 | sed "s/$//g") raw_arrayMac=$(Script.SNMP.Hex $OID_arrayMac | cut -d '"' -f 2 | cut -d '.' -f 1 | sed "s/-/:/g") readarray -t addressMac <<< $raw_arrayMac ;; esac } TpLink.IF() { TpLink.GetData interface TpLink.IF.Header for((i=0; i<${#nameIF[@]}; i++)) do TpLink.IF.operStatus printf "%s\t" "${nameIF[$i]}" TpLink.IF.IANAifType done } TpLink.IF.Header() { WarningCounter=0 CriticalCounter=0 for((i=0; i<${#name[@]}; i++)); do if [[ ${name[$i]} == *"wifi"* ]] ; then for value in "${statusIF[$i]}"; do if [[ $value != 1 ]] && [[ $value != 2 ]]; then WarningCounter=$(( WarningCounter + 1 )) elif [[ $value == 2 ]]; then CriticalCounter=$(( CriticalCounter + 1 )) fi done elif [[ ${name[$i]} == *"eth"* ]] ; then for value in "${statusIF[$i]}"; do if [[ $value != 1 ]] && [[ $value != 2 ]]; then WarningCounter=$(( WarningCounter + 1 )) elif [[ $value == 2 ]]; then CriticalCounter=$(( CriticalCounter + 1 )) fi done fi done for Error in "$(( WarningCounter + CriticalCounter ))"; do if [[ $WarningCounter == 0 ]] && [[ $CriticalCounter == 0 ]] ; then printf "%s\t%s\n\n" "OK!" "All interFace is Up" elif [[ $WarningCounter != 0 ]] && [[ $CriticalCounter == 0 ]] ; then printf "%s\t%s\n\n" "WARNING!" "$Error interFace with problem" elif [[ $CriticalCounter != 0 ]] ; then printf "%s\t%s\n\n" "CRITICAL!" "$Error interFace with problem" fi done printf "%s\t%s\t%s\n" "STATUS" "NAME" "TYPE" "==============================" } TpLink.IF.operStatus() { case ${statusIF[$i]} in 1) printf "%s\t" "Up" ;; 2) printf "%s\t" "Down" ;; 3) printf "%s\t" "Testing" ;; 4) printf "%s\t" "Unknown" ;; 5) printf "%s\t" "Dormant" ;; 6) printf "%s\t" "notPresent" ;; 7) printf "%s\t" "lowerLayerDown" ;; esac } TpLink.IF.IANAifType() { case ${typeIF[$i]} in 1) printf "%s\n" "other" ;; 2) printf "%s\n" "regular1822" ;; 3) printf "%s\n" "hdh1822" ;; 4) printf "%s\n" "ddnX25" ;; 5) printf "%s\n" "rfc877x25" ;; 6) printf "%s\n" "ethernetCsmacd" ;; 7) printf "%s\n" "iso88023Csmacd" ;; 8) printf "%s\n" "iso88024TokenBus" ;; 9) printf "%s\n" "iso88025TokenRing" ;; 10) printf "%s\n" "iso88026Man" ;; 11) printf "%s\n" "starLan" ;; 12) printf "%s\n" "proteon10Mbit" ;; 13) printf "%s\n" "proteon80Mbit" ;; 14) printf "%s\n" "hyperchannel" ;; 15) printf "%s\n" "fddi" ;; 16) printf "%s\n" "lapb" ;; 17) printf "%s\n" "sdlc" ;; 18) printf "%s\n" "ds1" ;; 19) printf "%s\n" "e1" ;; 20) printf "%s\n" "basicISDN" ;; 21) printf "%s\n" "primaryISDN" ;; 22) printf "%s\n" "propPointToPointSerial" ;; 23) printf "%s\n" "ppp" ;; 24) printf "%s\n" "softwareLoopback" ;; 25) printf "%s\n" "eon" ;; 26) printf "%s\n" "ethernet3Mbit" ;; 27) printf "%s\n" "nsip" ;; 28) printf "%s\n" "slip" ;; 29) printf "%s\n" "ultra" ;; 30) printf "%s\n" "ds3" ;; 31) printf "%s\n" "sip" ;; 32) printf "%s\n" "frameRelay" ;; 33) printf "%s\n" "rs232" ;; 34) printf "%s\n" "para" ;; 35) printf "%s\n" "arcnet" ;; 36) printf "%s\n" "arcnetPlus" ;; 37) printf "%s\n" "atm" ;; 38) printf "%s\n" "miox25" ;; 39) printf "%s\n" "sonet" ;; 40) printf "%s\n" "x25ple" ;; 41) printf "%s\n" "iso88022llc" ;; 42) printf "%s\n" "localTalk" ;; 43) printf "%s\n" "smdsDxi" ;; 44) printf "%s\n" "frameRelayService" ;; 45) printf "%s\n" "v35" ;; 46) printf "%s\n" "hssi" ;; 47) printf "%s\n" "hippi" ;; 48) printf "%s\n" "modem" ;; 49) printf "%s\n" "aal5" ;; 50) printf "%s\n" "sonetPath" ;; 51) printf "%s\n" "sonetVT" ;; 52) printf "%s\n" "smdsIcip" ;; 53) printf "%s\n" "propVirtual" ;; 54) printf "%s\n" "propMultiplexor" ;; 55) printf "%s\n" "ieee80212" ;; 56) printf "%s\n" "fibreChannel" ;; 57) printf "%s\n" "hippiInterface" ;; 58) printf "%s\n" "frameRelayInterconnect" ;; 59) printf "%s\n" "aflane8023" ;; 60) printf "%s\n" "aflane8025" ;; 61) printf "%s\n" "cctEmul" ;; 62) printf "%s\n" "fastEther" ;; 63) printf "%s\n" "isdn" ;; 64) printf "%s\n" "v11" ;; 65) printf "%s\n" "v36" ;; 66) printf "%s\n" "g703at64k" ;; 67) printf "%s\n" "g703at2mb" ;; 68) printf "%s\n" "qllc" ;; 69) printf "%s\n" "fastEtherFX" ;; 70) printf "%s\n" "channel" ;; 71) printf "%s\n" "ieee80211" ;; 72) printf "%s\n" "ibm370parChan" ;; 73) printf "%s\n" "escon" ;; 74) printf "%s\n" "dlsw" ;; 75) printf "%s\n" "isdns" ;; 76) printf "%s\n" "isdnu" ;; 77) printf "%s\n" "lapd" ;; 78) printf "%s\n" "ipSwitch" ;; 79) printf "%s\n" "rsrb" ;; 80) printf "%s\n" "atmLogical" ;; 81) printf "%s\n" "ds0" ;; 82) printf "%s\n" "ds0Bundle" ;; 83) printf "%s\n" "bsc" ;; 84) printf "%s\n" "async" ;; 85) printf "%s\n" "cnr" ;; 86) printf "%s\n" "iso88025Dtr" ;; 87) printf "%s\n" "eplrs" ;; 88) printf "%s\n" "arap" ;; 89) printf "%s\n" "propCnls" ;; 90) printf "%s\n" "hostPad" ;; 91) printf "%s\n" "termPad" ;; 92) printf "%s\n" "frameRelayMPI" ;; 93) printf "%s\n" "x213" ;; 94) printf "%s\n" "adsl" ;; 95) printf "%s\n" "radsl" ;; 96) printf "%s\n" "sdsl" ;; 97) printf "%s\n" "vdsl" ;; 98) printf "%s\n" "iso88025CRFPInt" ;; 99) printf "%s\n" "myrinet" ;; 100) printf "%s\n" "voiceEM" ;; 101) printf "%s\n" "voiceFXO" ;; 102) printf "%s\n" "voiceFXS" ;; 103) printf "%s\n" "voiceEncap" ;; 104) printf "%s\n" "voiceOverIp" ;; 105) printf "%s\n" "atmDxi" ;; 106) printf "%s\n" "atmFuni" ;; 107) printf "%s\n" "atmIma" ;; 108) printf "%s\n" "pppMultilinkBundle" ;; 109) printf "%s\n" "ipOverCdlc" ;; 110) printf "%s\n" "ipOverClaw" ;; 111) printf "%s\n" "stackToStack" ;; 112) printf "%s\n" "virtualIpAddress" ;; 113) printf "%s\n" "mpc" ;; 114) printf "%s\n" "ipOverAtm" ;; 115) printf "%s\n" "iso88025Fiber" ;; 116) printf "%s\n" "tdlc" ;; 117) printf "%s\n" "gigabitEthernet" ;; 118) printf "%s\n" "hdlc" ;; 119) printf "%s\n" "lapf" ;; 120) printf "%s\n" "v37" ;; 121) printf "%s\n" "x25mlp" ;; 122) printf "%s\n" "x25huntGroup" ;; 123) printf "%s\n" "transpHdlc" ;; 124) printf "%s\n" "interleave" ;; 125) printf "%s\n" "fast" ;; 126) printf "%s\n" "ip" ;; 127) printf "%s\n" "docsCableMaclayer" ;; 128) printf "%s\n" "docsCableDownstream" ;; 129) printf "%s\n" "docsCableUpstream" ;; 130) printf "%s\n" "a12MppSwitch" ;; 131) printf "%s\n" "tunnel" ;; 132) printf "%s\n" "coffee" ;; 133) printf "%s\n" "ces" ;; 134) printf "%s\n" "atmSubInterface" ;; 135) printf "%s\n" "l2vlan" ;; 136) printf "%s\n" "l3ipvlan" ;; 137) printf "%s\n" "l3ipxvlan" ;; 138) printf "%s\n" "digitalPowerline" ;; 139) printf "%s\n" "mediaMailOverIp" ;; 140) printf "%s\n" "dtm" ;; 141) printf "%s\n" "dcn" ;; 142) printf "%s\n" "ipForward" ;; 143) printf "%s\n" "msdsl" ;; 144) printf "%s\n" "ieee1394" ;; 145) printf "%s\n" "if-gsn" ;; 146) printf "%s\n" "dvbRccMacLayer" ;; 147) printf "%s\n" "dvbRccDownstream" ;; 148) printf "%s\n" "dvbRccUpstream" ;; 149) printf "%s\n" "atmVirtual" ;; 150) printf "%s\n" "mplsTunnel" ;; 151) printf "%s\n" "srp" ;; 152) printf "%s\n" "voiceOverAtm" ;; 153) printf "%s\n" "voiceOverFrameRelay" ;; 154) printf "%s\n" "idsl" ;; 155) printf "%s\n" "compositeLink" ;; 156) printf "%s\n" "ss7SigLink" ;; 157) printf "%s\n" "propWirelessP2P" ;; 158) printf "%s\n" "frForward" ;; 159) printf "%s\n" "rfc1483" ;; 160) printf "%s\n" "usb" ;; 161) printf "%s\n" "ieee8023adLag" ;; 162) printf "%s\n" "bgppolicyaccounting" ;; 163) printf "%s\n" "frf16MfrBundle" ;; 164) printf "%s\n" "h323Gatekeeper" ;; 165) printf "%s\n" "h323Proxy" ;; 166) printf "%s\n" "mpls" ;; 167) printf "%s\n" "mfSigLink" ;; 168) printf "%s\n" "hdsl2" ;; 169) printf "%s\n" "shdsl" ;; 170) printf "%s\n" "ds1FDL" ;; 171) printf "%s\n" "pos" ;; 172) printf "%s\n" "dvbAsiIn" ;; 173) printf "%s\n" "dvbAsiOut" ;; 174) printf "%s\n" "plc" ;; 175) printf "%s\n" "nfas" ;; 176) printf "%s\n" "tr008" ;; 177) printf "%s\n" "gr303RDT" ;; 178) printf "%s\n" "gr303IDT" ;; 179) printf "%s\n" "isup" ;; 180) printf "%s\n" "propDocsWirelessMaclayer" ;; 181) printf "%s\n" "propDocsWirelessDownstream" ;; 182) printf "%s\n" "propDocsWirelessUpstream" ;; 183) printf "%s\n" "hiperlan2" ;; 184) printf "%s\n" "propBWAp2Mp" ;; 185) printf "%s\n" "sonetOverheadChannel" ;; 186) printf "%s\n" "digitalWrapperOverheadChannel" ;; 187) printf "%s\n" "aal2" ;; 188) printf "%s\n" "radioMAC" ;; 189) printf "%s\n" "atmRadio" ;; 190) printf "%s\n" "imt" ;; 191) printf "%s\n" "mvl" ;; 192) printf "%s\n" "reachDSL" ;; 193) printf "%s\n" "frDlciEndPt" ;; 194) printf "%s\n" "atmVciEndPt" ;; 195) printf "%s\n" "opticalChannel" ;; 196) printf "%s\n" "opticalTransport" ;; 197) printf "%s\n" "propAtm" ;; 198) printf "%s\n" "voiceOverCable" ;; 199) printf "%s\n" "infiniband" ;; 200) printf "%s\n" "teLink" ;; 201) printf "%s\n" "q2931" ;; 202) printf "%s\n" "virtualTg" ;; 203) printf "%s\n" "sipTg" ;; 204) printf "%s\n" "sipSig" ;; 205) printf "%s\n" "docsCableUpstreamChannel" ;; 206) printf "%s\n" "econet" ;; 207) printf "%s\n" "pon155" ;; 208) printf "%s\n" "pon622" ;; 209) printf "%s\n" "bridge" ;; 210) printf "%s\n" "linegroup" ;; 211) printf "%s\n" "voiceEMFGD" ;; 212) printf "%s\n" "voiceFGDEANA" ;; 213) printf "%s\n" "voiceDID" ;; 214) printf "%s\n" "mpegTransport" ;; 215) printf "%s\n" "sixToFour" ;; 216) printf "%s\n" "gtp" ;; 217) printf "%s\n" "pdnEtherLoop1" ;; 218) printf "%s\n" "pdnEtherLoop2" ;; 219) printf "%s\n" "opticalChannelGroup" ;; 220) printf "%s\n" "homepna" ;; 221) printf "%s\n" "gfp" ;; 222) printf "%s\n" "ciscoISLvlan" ;; 223) printf "%s\n" "actelisMetaLOOP" ;; 224) printf "%s\n" "fcipLink" ;; 225) printf "%s\n" "rpr" ;; 226) printf "%s\n" "qam" ;; 227) printf "%s\n" "lmp" ;; 228) printf "%s\n" "cblVectaStar" ;; 229) printf "%s\n" "docsCableMCmtsDownstream" ;; 230) printf "%s\n" "adsl2" ;; 231) printf "%s\n" "macSecControlledIF" ;; 232) printf "%s\n" "macSecUncontrolledIF" ;; 233) printf "%s\n" "aviciOpticalEther" ;; 234) printf "%s\n" "atmbond" ;; 235) printf "%s\n" "voiceFGDOS" ;; 236) printf "%s\n" "mocaVersion1" ;; 237) printf "%s\n" "ieee80216WMAN" ;; 238) printf "%s\n" "adsl2plus" ;; 239) printf "%s\n" "dvbRcsMacLayer" ;; 240) printf "%s\n" "dvbTdm" ;; 241) printf "%s\n" "dvbRcsTdma" ;; 242) printf "%s\n" "x86Laps" ;; 243) printf "%s\n" "wwanPP" ;; 244) printf "%s\n" "wwanPP2" ;; 245) printf "%s\n" "voiceEBS" ;; 246) printf "%s\n" "ifPwType" ;; 247) printf "%s\n" "ilan" ;; 248) printf "%s\n" "pip" ;; 249) printf "%s\n" "aluELP" ;; 250) printf "%s\n" "gpon" ;; 251) printf "%s\n" "vdsl2" ;; 252) printf "%s\n" "capwapDot11Profile" ;; 253) printf "%s\n" "capwapDot11Bss" ;; 254) printf "%s\n" "capwapWtpVirtualRadio" ;; 255) printf "%s\n" "bits" ;; 256) printf "%s\n" "docsCableUpstreamRfPort" ;; 257) printf "%s\n" "cableDownstreamRfPort" ;; 258) printf "%s\n" "vmwareVirtualNic" ;; 259) printf "%s\n" "ieee802154" ;; 260) printf "%s\n" "otnOdu" ;; 261) printf "%s\n" "otnOtu" ;; 262) printf "%s\n" "ifVfiType" ;; 263) printf "%s\n" "g9981" ;; 264) printf "%s\n" "g9982" ;; 265) printf "%s\n" "g9983" ;; 266) printf "%s\n" "aluEpon" ;; 267) printf "%s\n" "aluEponOnu" ;; 268) printf "%s\n" "aluEponPhysicalUni" ;; 269) printf "%s\n" "aluEponLogicalLink" ;; 270) printf "%s\n" "aluGponOnu" ;; 271) printf "%s\n" "aluGponPhysicalUni" ;; 272) printf "%s\n" "vmwareNicTeam" ;; esac } TpLink.ClientConnected() { TpLink.GetData client printf "%s\n" "Conneceted clients: $clientCon" if [[ $clientCon != 0 ]] ; then printf "\n" for((i=0; i<${#addressMac[@]}; i++)); do printf "%s\n" "$((i+1)). ${addressMac[$i]}" done fi } # - Help Help.Main() { echo "Check AP Status" 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 -h " } 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.IPMI() { printf "\n%s\n\n" "TpLink AP EAP265HD Check Function" printf "%s\t%s\n\n" "Check" "Description" printf "%s\t%s\n" "all" "Full monitoring check with single output" printf "%s\t%s\n" "cpu" "Monitoring CPU load" printf "%s\t%s\n" "err" "Monitoring system error" printf "%s\t%s\n" "fan" "Monitoring fan speed" printf "%s\t%s\n" "ram" "Monitoring RAM load" printf "%s\t%s\n" "hw" "Monitoring Hardware status" printf "%s\t%s\n" "temp" "Monitoring temperature sensor" } 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) TpLink.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 TpLink.Main