我一直在对snmpenum.pl脚本进行一些调试,并且NEt :: SNMP运行良好,问题是脚本在从OID值文件(linux)读取行时分割值的方式。 txt,windows.txt,cisco.txt)。 SOLUTION: 如果你在windows.txt/linux.txt/cisco.txt文件的每行末尾添加一个\ t,那么脚本会再次运行!
我发现,如果通过硬编码字符串,如“1.3.6.1.2.1.1.5”(或任何你想要的值)的Net :: SNMP协议> session.get_bulk_request更换读取OID值( )查询工作。
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+/,$_;
最后,我在的末尾加上一个\ t(表)在snmpenum.pl发布的windows.txt,linux,txt和cisco.txt文件中,所有这些文件都可以正常工作。对于这个前:
for filename in $(ls *.txt); do perl -i -p -e 's/\r\n/\t\r\n/' ./$filename; done
另一个解决办法是作出snmpenum.pl代码修改...
干杯, 摩根
也许在您的系统上的Net :: SNMP模块和作者所拥有的模块之间存在版本冲突? 另外,检查linux.txt是否有符合系统约定的行结束符(Windows的ms-dos行结束符,Linux的unix行结束符等)。 – Jolta 2014-12-07 21:35:18