calmh / node-snmp-native

Native Javascript SNMP library for Node.js
MIT License
252 stars 65 forks source link

AssertionError: 48 == 83 #8

Closed danielmitd closed 11 years ago

danielmitd commented 11 years ago

Got the following error:

AssertionError: 48 == 83
    at parse (/srv/httpd/dashboard/node_modules/snmp-native/lib/snmp.js:183:12)
    at EventEmitter.msgReceived (/srv/httpd/dashboard/node_modules/snmp-native/lib/snmp.js:362:15)
    at Socket.EventEmitter.emit (events.js:96:17)
    at UDP.onMessage (dgram.js:350:8)

Message data:
    53 70 6f 74 55 64 70 30 52 37 d8 75 89 71 3d 0e 
    00 01 00 04 48 95 c2 03 a2 b8 ae 7f d6 2e 5a b1 
    45 1e c7 7c e1 54 21 ec 55 61 18 a1 

events.js:68
        throw arguments[1]; // Unhandled 'error' event
                       ^
AssertionError: 48 == 83
    at parse (/srv/httpd/dashboard/node_modules/snmp-native/lib/snmp.js:183:12)
    at EventEmitter.msgReceived (/srv/httpd/dashboard/node_modules/snmp-native/lib/snmp.js:362:15)
    at Socket.EventEmitter.emit (events.js:96:17)
    at UDP.onMessage (dgram.js:350:8)

Do you need some further information?

calmh commented 11 years ago

Hi!

Sorry for the long response time here, I missed the mail on this one. :( It seems that the data in question (that could not be parsed) is not a valid SNMP packet. Do you know what kind of device generated this and if possible in response to what command? Can you reproduce it?

danielmitd commented 11 years ago

Absolut no problem.

Unfortunately I'm not able to reproduce it. The error output was result of a long running monitoring script. The script watches multiple servers on multiple metrics and was not made to produce some more detailed error output.

So feel free to close the issue and I'll reopen it if the error occurs a second time.

Maybe the AssertionError could include some more details about the MIB and the host which was queried.

dasilva333 commented 10 years ago

I can confirm this error is still happening on the latest version of the code, not sure if I should open a new ticket or continue this thread. I'm also attempting to consistently reproduce the problem.

calmh commented 10 years ago

So, this happens when the data that is parsed does not look like valid SNMP data. The behavior is intended, but the cause can be two things: the data is broken, in which case node-snmp is fine, or there is a bug/misunderstanding in the parser. Capturing the data, or pasting the output from node-snmp, can help clarify that.

To avoid crashing, you can listen for the error event on the session.

dasilva333 commented 10 years ago

Can you show us the syntax to listen for error events? Do I just wrap the new session in a try catch or do I listen to for error events on the session socket? try { var session = new snmp.Session(); }catch(e){}

or var session = new snmp.Session();

session.on("error", function(){});

Will that prevent the program from crashing if it receives bad input?

Thanks for your help

calmh commented 10 years ago

The latter should work.