我一直在对 snmpenum.pl 脚本进行一些调试,并且 NEt::SNMP 运行良好,问题是脚本在从 OID 值文件(linux.txt,windows.txt)读取行时拆分值的方式。 txt、cisco.txt)。
解决方案:
如果您在 windows.txt/linux.txt/cisco.txt 文件的每一行末尾添加一个 \t,则脚本再次运行!
我发现如果您用硬编码字符串替换读取的 OID 值,例如“1.3.6.1.2.1.1.5”(或您想要的任何值),Net::SNMP->session.get_bulk_request() 查询就可以工作。
my $result = $session-get_bulk_request(){
-callback => [\&table_cb, {}],
-maxrepetitions => 10,
-varbindlist => [$v]
};
使用硬编码字符串:
my $result = $session-get_bulk_request(){
-callback => [\&table_cb, {}],
-maxrepetitions => 10,
-varbindlist => ["1.3.6.1.2.1.1.5"]
};
所以我去看看 var $v 是如何创建的,它是从文件中读取的,代码基于 \t 字符进行拆分,该字符不存在于行尾。所以我假设最后一个值可能包含行尾的任何虚假字符 ascii 代码(换行符或回车符?):
while (<CONFIG>){
chomp $_;
my @system= split /\t+/,$_;
最后,我在与 snmpenum.pl 一起分发的 windows.txt、linux、txt 和 cisco.txt 文件的行尾添加了一个 \t (Tab),并且一切正常!例如:
for filename in $(ls *.txt); do perl -i -p -e 's/\r\n/\t\r\n/' ./$filename; done
另一种解决方案是对 snmpenum.pl 进行代码修改...
干杯,摩根