Node.js 如何使用snmpjs发送消息

Node.js 如何使用snmpjs发送消息,node.js,snmp,Node.js,Snmp,很多人可能不熟悉snmpjs,但如果您熟悉SNMP,那么我需要一些帮助发送我使用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 //...e

很多人可能不熟悉snmpjs,但如果您熟悉SNMP,那么我需要一些帮助发送我使用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);
我得到了一个陷阱,它几乎可以与网络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});
这本身就让人困惑,但这是根据atltantageek.com创建snmp陷阱侦听器的方法:


这让我很困惑,因为我们似乎同时使用dgram和eventEmitter来监听陷阱。很明显,我不知道该用哪种方式发送陷阱。

对于任何使用过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");
});