#!/bin/bash # ABOUT softether vpn for zabbix # author mikedmorto 2020 year export LC_ALL="" export LANG="en_US.UTF-8" version="3.2" . sevpn3.cfg JSON="" ##### PARAMETERS##### METRIC="$1" ITEM="$2" case "$METRIC" in discovery) HUBS=`$VCMD /server ${URL} /PASSWORD:${PWD} /CMD Hublist | grep "Virtual Hub Name" | awk -F"|" '{print $2}'` JSON="{ \"data\":[" HUBUSERS="" HUBBRIDGES="" HUBCASCADES="" #add all users from hub into habuser list for HUB_NAME in ${HUBS}; do USERS=`$VCMD /server ${URL} /adminhub:$HUB_NAME /PASSWORD:${PWD} /CMD UserList | grep "User Name" | awk -F"|" '{print $2}'` for U in ${USERS}; do HUBUSERS=${HUBUSERS}${HUB_NAME}","${U}" " done done #add all bridges from hub into hubbridge list for HUB_NAME in ${HUBS}; do BRIDGES=`$VCMD /server ${URL} /PASSWORD:${PWD} /CMD BridgeList | tr -d ' ' | awk '-F|' -v VH="${HUB_NAME}" '{if ($2==VH) print $3}'` for B in ${BRIDGES}; do HUBBRIDGES=${HUBBRIDGES}${HUB_NAME}","${B}" " done done #add all cascades from hub into hubcascade list for HUB_NAME in ${HUBS}; do CAS=`$VCMD /server ${URL} /adminhub:$HUB_NAME /PASSWORD:${PWD} /CMD CascadeList | grep "Setting Name" | awk -F"|" '{print $2}'` for C in ${CAS}; do HUBCASCADES=${HUBCASCADES}${HUB_NAME}","${C}" " done done #show all hubs for HUB_NAME in ${HUBS}; do JSON=${JSON}" {\"{#HUB_NAME}\":\"${HUB_NAME}\"}," done #show all hubusers for HUBUSER_NAME in ${HUBUSERS}; do JSON=${JSON}" {\"{#HUB_USER_NAME}\":\"${HUBUSER_NAME}\"}," done #show all hubbridges for HUBBRIDGE_NAME in ${HUBBRIDGES}; do JSON=${JSON}" {\"{#HUB_BRIDGE_NAME}\":\"${HUBBRIDGE_NAME}\"}," done #show all hubcascades for HUBCASCADE_NAME in ${HUBCASCADES}; do JSON=${JSON}" {\"{#HUB_CASCADE_NAME}\":\"${HUBCASCADE_NAME}\"}," done # delete last simbol and add the end JSON=${JSON::-1} JSON=${JSON}"]}" echo ${JSON} exit 0 ;; srv.uptime) start_date=`$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Server Started at" | awk -F"|" '{print $2}'` start_date_timestamp=`date -d "$start_date" +%s` current_date_timestamp=`date +%s` uptime_timestamp=$[$current_date_timestamp - $start_date_timestamp] echo "$uptime_timestamp" ;; srv.number_of_users) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of Users" | awk -F"|" '{print $2}'` ;; srv.number_of_ip_address_tables) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of IP Address Tables" | awk -F"|" '{print $2}'` ;; srv.number_of_mac_address_tables) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of MAC Address Tables" | awk -F"|" '{print $2}'` ;; srv.number_of_sessions) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of Sessions" | awk -F"|" '{print $2}'` ;; srv.number_of_virtual_hubs) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of Virtual Hubs" | awk -F"|" '{print $2}'` ;; srv.number_of_active_sockets) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of Active Sockets" | awk -F"|" '{print $2}'` ;; srv.l2tp_status) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD IPsecGet | grep "L2TP over IPsec Server Function Enabled" | awk -F"|" '{print $2}'` ;; srv.openvpn_status) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD openvpnget | grep "OpenVPN Clone Server Enabled" | awk -F"|" '{print $2}'` ;; srv.version) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | awk 'FNR=='"3"` ;; hub.if.out.broad) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Outgoing Broadcast Total Size" | tr -d ',' | grep -o "[0-9]*"` ;; hub.if.in.broad) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Incoming Broadcast Total Size" | tr -d ',' | grep -o "[0-9]*"` ;; hub.if.in.uni) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Incoming Unicast Total Size" | tr -d ',' | grep -o "[0-9]*"` ;; hub.if.out.uni) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Outgoing Unicast Total Size" | tr -d ',' | grep -o "[0-9]*"` ;; hub.sessions-bridge) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Sessions (Bridge)" | awk -F"|" '{print $2}'` ;; hub.sessions-client) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Sessions (Client)" | awk -F"|" '{print $2}'` ;; hub.sessions-all) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Sessions " | awk -F"|" '{print $2}'` ;; hub.securenat) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "SecureNAT" | awk -F"|" '{print $2}'` ;; hub.type) echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Type" | awk -F"|" '{print $2}'` ;; cas.status) HUB=${ITEM%,*} CAS=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Session Status" | awk -F"|" '{print $2}'` ;; cas.if.out.broad) HUB=${ITEM%,*} CAS=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Outgoing Broadcast Total Size" | tr -d ',' | grep -o "[0-9]*"` ;; cas.if.in.broad) HUB=${ITEM%,*} CAS=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Incoming Broadcast Total Size" | tr -d ',' | grep -o "[0-9]*"` ;; cas.if.in) HUB=${ITEM%,*} CAS=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Incoming Data Size" | tr -d ',' | grep -o "[0-9]*"` ;; cas.if.out) HUB=${ITEM%,*} CAS=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Outgoing Data Size" | tr -d ',' | grep -o "[0-9]*"` ;; cas.if.out.uni) HUB=${ITEM%,*} CAS=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Outgoing Unicast Total Size" | tr -d ',' | grep -o "[0-9]*"` ;; cas.if.in.uni) HUB=${ITEM%,*} CAS=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Incoming Unicast Total Size" | tr -d ',' | grep -o "[0-9]*"` ;; br.status) HUB=${ITEM%,*} BR=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD bridgelist | tr -d ' ' | awk '-F|' -v VH="${HUB}" -v VB="${BR}" '{if ($2==VH && $3==VB) print $4}'` ;; usr.if.out.broad) HUB=${ITEM%,*} USER=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Outgoing Broadcast Total Size" | sed -e 's/[^0-9]//g'` ;; usr.if.in.broad) HUB=${ITEM%,*} USER=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Incoming Broadcast Total Size" | sed -e 's/[^0-9]//g'` ;; usr.if.in.uni) HUB=${ITEM%,*} USER=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Incoming Unicast Total Size" | sed -e 's/[^0-9]//g'` ;; usr.if.out.uni) HUB=${ITEM%,*} USER=${ITEM##*,} echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Outgoing Unicast Total Size" | sed -e 's/[^0-9]//g'` ;; usr.lastlogin) HUB=${ITEM%,*} USER=${ITEM##*,} echo `$VCMD /SERVER ${URL} /adminhub:"$HUB" /PASSWORD:"${PWD}" /CMD UserGet "${USER}" | grep "Updated on" | awk -F"|" '{print $2}'` ;; script.version) echo ${version} ;; help) echo "please use these params { discovery srv.uptime srv.number_of_users srv.number_of_ip_address_tables srv.number_of_mac_address_tables srv.number_of_sessions srv.number_of_virtual_hubs srv.number_of_active_sockets srv.l2tp_status srv.openvpn_status srv.version hub.if.out.broad hub.if.in.broad hub.if.out.uni hub.if.in.uni hub.sessions-bridge hub.sessions-client hub.sessions-all hub.securenat hub.type cas.status cas.if.in.broad cas.if.out.broad cas.if.out cas.if.in cas.if.in.uni cas.if.out.uni br.status usr.lastlogin usr.if.out.broad usr.if.in.broad usr.if.in.uni usr.if.out.uni script.version }" ;; *) echo "" ;; esac