faz uma saída de tabela

0

se for possível fazer um snmpwalk em um script perl e colocar a saída em uma tabela para fazer um tipo de associação como para cada nome de host que eu tenho na mesma linha se index e desc eu tiver o script no bash mas a saída que eu não tenho a associação que eu quero, então eu preciso de sua ajuda

#!/bin/bash
Rep_Scripts='/home/scripts'
out_file='/home/scripts/out_file'
rm -rf $Rep_Scripts/out_file

for i in 'cat $Rep_Scripts/IP_ALU_LIST.txt | awk '{print}''
do
read hostname ip <<< $(echo $i |sed 's/;/ /')


        echo "${hostname} ==> ${ip} If_Name" >> out_file
        snmpwalk -v2c -c ${ip} OID>> out_file
        echo "${hostname} ==> ${ip} Global_If_Index" >> out_file
         snmpwalk -v2c -c ${ip} OID >>  out_file
        echo "${hostname} ==> ${ip} If_Statut" >> out_file
        snmpwalk -v2c -c  ${ip} OID >> out_file


done

eu tenho em IP_ALU_LIST.txt

router2;89.100.12.100
router3;100.100.100.100
    
por toto 24.04.2015 / 10:08

1 resposta

1

Primeiro, refatorando sua pergunta:

How can I construct a perl script that inputs data from snmpwalk for each IP/Host and outputs a table for each OID.

Em segundo lugar, seus comandos de exemplo snmpwalk não fazem sentido. Pode fazer sentido se OID fosse uma variável. Você provavelmente quer usar     snmpwalk -v2 -c public $ {ip} $ {OID}

Você poderia fazer algo assim:

#!/usr/bin/env perl -w
# Invoke via $0 <ip-address-file> <OIDs ... >
$input_file=shift @ARGV;
$oids=join(" ",@ARGV);
$oids gt '' || die "Please provide at least one OID for snmpget to fetch"

format STDOUT_TOP = 
@<<<<<<<<<<<  @>>>>>>>>>>>>>>>>>>>
$ip,$hostname
.
format STDOUT = 
@<<<<<<<<<<<<<<<<<<<<< @||||||||||||| @>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$oid,$type,$value
.
$^L="\n\n\n";

# parse inputfile
open(IPFILE,$input_file) or die "Cannot open $input_file";
while (my $host=<IPFILE>) { 
  chomp $host;
  my ($hostname,$ip) = split(";",$host,2);

  open(SNMP,"snmpget -v2 -cpublic $ip $oids |") or die "Cannot run snmpwalk"
  print "$hostname => $ip :\n";
  while ($_ = <SNMP>) { 
       if ( ($oid,$type,$value) = /^(.*?) = ([^:]+): (.*)$/ ) { 
          write
       } else {
          print STDERR  "Could not parse this output:\n  $_";
       }
  }
  $- = 0;
}

snmpget produzirá uma linha para cada OID. Consulte o link para obter mais informações sobre o "formato" Perl e o comando write associado. O $^L define o delimitador de página como três feeds de linha em vez do caractere de ejeção de página tradicional (que é CTRL-L). O bit $- = 0; essencialmente força uma nova página (com um novo cabeçalho) na próxima vez que "write" é chamado. E na próxima vez que for chamado, $hostname e $ip terão novos valores.

    
por 24.04.2015 / 12:19