许多人可能不熟悉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);
我得到的陷阱几乎可以与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});
这本身令人困惑,但这是按照atlantageek.com创建snmp陷阱监听器的方法:http://atlantageek.com/2014/08/23/snmp-trap-listener-in-node/
这让我感到困惑,因为我们似乎正在使用dgram和eventEmitter来监听陷阱。我很惊讶发送陷阱的方式。
答案 0 :(得分:1)
对于任何使用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");
});