2014-09-04 71 views
1

許多人可能不熟悉snmpjs,但是如果您熟悉SNMP,那麼我需要一些幫助發送陷阱消息我使用snmpjs生成的。在運行下面的代碼...如何使用snmpjs發送消息

var trap = snmp.message.createMessage({ 
    version: 0, //this means send a SNMP v1 trap 
    community: "public", 
    pdu: snmp.pdu.createPDU({ 
     op: 4,//SNMP trap v1 
     //...etc. etc. 
    }), 
}); 

console.log(trap); 

我得到一個陷阱,可能幾乎與net-snmp產生的陷阱差異。問題是,我不知道如何正確發送這個陷阱信息。 snmpjs似乎沒有發送功能,這真讓我感到困惑。不知道爲什麼他們會讓這個框架生成消息,如果他們沒有發送它們的方法。

總之,我最近的想法

var str = JSON.stringify(trap); 
var buf = new Buffer(str.toString()); 
var conn = dgram.createSocket('udp4'); 
conn.send(buf, 0, buf.length, 162, 'localhost', function(err, bytes) { 
    console.log(bytes+" bytes written"); 
    conn.close(); 
}); 

裏面居然打印出

3152 bytes written. 

但是,這理應接收陷阱的服務器什麼都不說。我發送的方法是錯誤的,但如果有人想看到服務器代碼聽這裏的陷阱是

var trapd = snmp.createTrapListener(); 
trapd.on('trap', function(msg){ 
    console.log("Message says..."); 
    console.log(msg); 
}); 
trapd.bind({family: 'udp4', port:162}); 

這本身就是混亂但這是按照創建SNMP陷阱偵聽的方式atlantageek.com:http://atlantageek.com/2014/08/23/snmp-trap-listener-in-node/

這使我困惑,因爲我們似乎在使用dgram和eventEmitter來偵聽陷阱。顯然我很困惑發送陷阱的方式。

回答

0

的答案,因爲誰曾經使用snmpjs在下列任何人......

trap.encode(); 

var socket = dgram.createSocket('udp4'); 

socket.send(trap._raw.buf, 0, trap._raw.len, 162, 'localhost', function(err, bytes) { 
    if(err) console.log(err); 
    console.log(bytes+" bytes written"); 
});