Доброго времени суток. Написал говноскриптскрипт на bash, в perl, увы не силён. Нужно переписать его на perl. Bash очень медленный из-за количества awk, к тому же в JSON выводит не верно.На perl есть модуль JSON, SNMP и вроде бы IPCALC. Вот само поделие:
#!/bin/bash
snmp=/usr/bin/snmpwalk
ipcalc=/usr/bin/ipcalc
community="sbrf"
ver="v2c"
ip=$1
community=$2
fl=/tmp/json
neigbor=`$snmp -$ver -c $community $ip 1.3.6.1.2.1.14.10.1.1 | awk -F "IpAddress: " '{print $2}'`
ospfint=`$snmp -$ver -c $community $ip 1.3.6.1.2.1.14.7.1.1 | awk -F "IpAddress: " '{print $2}'`
echo "{">$fl
echo " \"data\" : [">>$fl
for arg in $neigbor
do
##################
for argg in $ospfint
do
mask=`$snmp -$ver -c $community $ip 1.3.6.1.2.1.4.20.1.3.$argg | awk -F "IpAddress: " '{print $2}'`
net=`$ipcalc $argg $mask | grep Network: | awk '{print $2}'`
vhod=`$ipcalc $net /32 | grep Hostroute: | awk '{print $2}' | grep $arg`
if [ "$vhod" ]
then
gw=$argg
fi
done
###############
echo " {">>$fl
echo " \"{#IP}\" : \"$arg\",">>$fl
echo " \"{#GW}\" : \"$gw\",">>$fl
index=`$snmp -$ver -c $community $ip 1.3.6.1.2.1.4.20.1.2.$gw | awk -F "INTEGER: " '{print $2}'`
echo " \"{#INDEX}\" : \"$index\",">>$fl
alias=`$snmp -$ver -c $community $ip 1.3.6.1.2.1.31.1.1.1.18.$index | awk -F "STRING: " '{print $2}'`
echo " \"{#IFALIAS}\" : $alias,">>$fl
status=`$snmp -$ver -c $community $ip 1.3.6.1.2.1.14.10.1.6.$arg.0 | awk -F "INTEGER: " '{print $2}'`
echo " \"{#STATUS}\" : \"$status\"">>$fl
echo " },">>$fl
done
echo " ]">>$fl
echo "}">>$fl
cat $fl
rm $fl
Вот, что он выводит, в конце лишняя запятая:
{
"data" : [
{
"{#IP}" : "10.200.70.69",
"{#GW}" : "10.200.70.70",
"{#INDEX}" : "14",
"{#IFALIAS}" : "ROSTELEKOM (DSV), IP: 172.19.208.170, to OVC_9070 [2]",
"{#STATUS}" : "8"
},
{
"{#IP}" : "10.200.70.73",
"{#GW}" : "10.200.70.74",
"{#INDEX}" : "16",
"{#IFALIAS}" : "ROSTELEKOM (DSV), IP: 172.19.208.170, to RVC_9070 [4]",
"{#STATUS}" : "8"
},
{
"{#IP}" : "10.200.70.77",
"{#GW}" : "10.200.70.78",
"{#INDEX}" : "13",
"{#IFALIAS}" : "ROSTELEKOM, IP: 172.30.56.218, to OVC_9070 [1]",
"{#STATUS}" : "8"
},
{
"{#IP}" : "10.200.70.81",
"{#GW}" : "10.200.70.82",
"{#INDEX}" : "15",
"{#IFALIAS}" : "ROSTELEKOM, IP: 172.30.56.218, to RVC_9070 [3]",
"{#STATUS}" : "8"
},
]
}
Кто возьмётся - буду очень благодарен. Спасибо.