Monitoramento de BGP usando script externo para "pegar" o "nome dos ASN".
Bash split string into array using 4 simple methods
JSONPath Online Evaluator - jsonpath.com
Bash For Loop Array: Iterate Through Array Values
LAÇOS OU LOOPS COM SHELL SCRIPT (FOR, WHILE E UNTIL)
30 Exemplos de Comando SED Com Regex
JavaScript Zabbix preprocessing cheat sheet, substitution samples
Extracting specific data from SNMP
How to split a string into an array in Bash?
Unix / Linux - Shell Basic Operators
apt install whois
cd /usr/lib/zabbix/externalscripts
chown zabbix. /usr/lib/zabbix/externalscripts/asname
chmod +x /usr/lib/zabbix/externalscripts/asname
nano asname
#! /usr/bin/bash
alert(){
echo -e "Tente algo como: ./asname <DEVICE_COMUNITY> <DEVICE_IP>\nOu no zabbix: asname[{\$SNMP_COMMUNITY}, {HOST.IP}]";
exit 0;
}
if [ "$1" = "" ]; then alert; fi;
if [ "$2" = "" ]; then alert; fi;
OID="1.3.6.1.4.1.2011.5.25.177.1.1.2.1";
as=($(snmpwalk -v 2c -c $1 $2 $OID.2 | sed 's/.*: //'));
snmpindexs=($(snmpwalk -v 2c -c $1 $2 $OID.2 | sed 's/ = .*//' | sed 's/iso.*.1.2.1.2.//'));
remoteaddress=($(snmpwalk -v 2c -c $1 $2 $OID.4 | sed 's/.*: //' | sed 's/"//' | sed 's/"//'));
states=($(snmpwalk -v 2c -c $1 $2 $OID.5 | sed 's/.*: //'));
echo "ASNAME|SNMPINDEX|REMOTEADD|STATE";
C=0;
for i in "${as[@]}"; do
ASNAME=$(whois -h whois.cymru.com AS$i | egrep -v "AS Name");
echo "$ASNAME|${snmpindexs[$C]}|${remoteaddress[$C]}|${states[$C]}";
let C=C+1;
done;
Esse script tem o CSV como formato de saida de dados. Por isso vamos usar o pre-processamento do Zabbix para converte-lo para um formato Json.
- Nome: "CSV to JSON".
- Parâmetros: "|" (pipe).
- Esse sinal é o que delimita as informações do nosso CSV. Geralmente usamos a vírgula para isso. Mas como o 'nome do asn' pode conter virgulas tambem, optei por separar as informações com o "|" (pipe).