我一直在對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