Perlスクリプトでsnmpwalkを実行し、indexとdescの場合、同じ行に各ホスト名がある場合など、一部の相関関係の出力をテーブルに入れることができる場合は、bashにスクリプトがありますが出力があります。私が欲しい協会なので、あなたの助けが必要です
#!/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
IP_ALU_LIST.txtにあります。
router2;89.100.12.100
router3;100.100.100.100
答え1
まず、質問を再設定してください。
各IP /ホストに対してsnmpwalkからデータを入力し、各OIDのテーブルを出力するPerlスクリプトを作成する方法。
第二に、あなたのサンプルsnmpwalk
コマンドは意味がありません。OID
変数であれば、これは意味があるかもしれません。おそらくsnmpwalk -v2 -c public ${ip} ${OID}を使用しようとしています。
次のことができます。
#!/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
各OIDについて1行が出力される。バラよりhttp://linux.die.net/man/1/perlformPerl 「フォーマット」と関連write
コマンドに関する追加情報。$^L
ページ区切り記号を既存のページポップ文字(CTRL-L)の代わりに3つの改行文字に設定します。この$- = 0;
ビットは、デフォルトで次に「書き込み」が呼び出されたときに新しいページ(新しいヘッダーを含む)を強制的に生成します。次回呼び出されると、新しい値が表示されます$hostname
。$ip