Socket
Socket
Sign inDemoInstall

node-mndp

Package Overview
Dependencies
0
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.2 to 0.0.3

8

dist/Discovery.d.ts

@@ -11,3 +11,3 @@ /// <reference types="node" />

*/
output(callback: (response: Device) => void): any;
output(callback: (response: Device) => void): void;
/**

@@ -17,8 +17,2 @@ * Format the buffer array

private format(callback);
/**
* Decode the length / the value
* @param start Byte to start
* @param callback
*/
private decode(start);
}

72

dist/Discovery.js

@@ -25,3 +25,6 @@ "use strict";

identity: '',
version: ''
version: '',
platform: '',
uptime: 0,
board: ''
};

@@ -31,34 +34,41 @@ /**

*/
let first_byte = 8;
this.decode(first_byte).then((response) => {
device.macAddress = format_1.buf2hex(response.buffer);
first_byte += response.length + 4;
return this.decode(first_byte);
}).then((response) => {
device.identity = format_1.bin2String(response.buffer);
first_byte += response.length + 4;
return this.decode(first_byte);
}).then((response) => {
device.version = response.buffer.toString();
}).then(() => {
callback(device);
});
let bufferLength = this.msg.buffer.byteLength;
let offset = 4;
while (offset + 4 < bufferLength) {
let attrHead = Buffer.from(this.msg.buffer.slice(offset, offset + 4));
let attrType = attrHead.readUInt16BE(0);
let attrLength = attrHead.readUInt16BE(2);
offset += 4;
if (offset + attrLength > bufferLength) {
console.warn('invalid mndp packet: attribute too long');
break;
}
switch (attrType) {
case 1: // mac address
device.macAddress = format_1.buf2hex(this.msg.subarray(offset, offset + attrLength));
break;
case 5: // identity
device.identity = format_1.bin2String(this.msg.subarray(offset, offset + attrLength));
break;
case 7: // version
device.version = format_1.bin2String(this.msg.subarray(offset, offset + attrLength));
break;
case 8: // platform
device.platform = format_1.bin2String(this.msg.subarray(offset, offset + attrLength));
break;
case 10: // uptime
device.uptime = Buffer.from(this.msg.slice(offset, offset + attrLength)).readUInt32LE(0);
break;
case 12: // board
device.board = format_1.bin2String(this.msg.subarray(offset, offset + attrLength));
break;
default: // unknown type
console.debug('unknown mndp message type', attrType);
break;
}
offset += attrLength;
}
callback(device);
}
/**
* Decode the length / the value
* @param start Byte to start
* @param callback
*/
decode(start) {
return new Promise((resolve, reject) => {
let lengthArray = new Buffer(this.msg.buffer.slice(start - 2, start));
let length = lengthArray.readIntBE(0, lengthArray.byteLength);
let item = new Buffer(this.msg.slice(start, start + length));
resolve({
buffer: item,
length: length
});
});
}
}
exports.Discovery = Discovery;

@@ -10,2 +10,3 @@ /// <reference types="node" />

host: undefined | string;
started: undefined | boolean;
version: dgram.SocketType;

@@ -12,0 +13,0 @@ constructor(options: Options);

@@ -16,5 +16,5 @@ "use strict";

this.server = dgram.createSocket(this.version);
dgram.createSocket(this.version);
this.port = options.port || this.default.port;
this.host = options.host || this.default.host;
this.started = false;
this.registerListeners();

@@ -27,2 +27,3 @@ }

if (this.server) {
this.started = true;
this.server.bind(this.port, this.host);

@@ -35,4 +36,5 @@ }

stop() {
if (this.server) {
if (this.server && this.started) {
this.server.close();
this.started = false;
}

@@ -39,0 +41,0 @@ }

@@ -6,2 +6,5 @@ export interface Device {

identity: string;
platform: string;
uptime: number;
board: string;
}
import { Device } from './interfaces/device';
import { Rinfo } from './interfaces/rinfo';
import { DecodeOutput } from './interfaces/decodeOutput';
import { buf2hex, bin2String } from './util/format';
declare var Promise: any;
export class Discovery {

@@ -21,4 +18,3 @@

*/
output(callback: (response: Device) => void): any
{
output(callback: (response: Device) => void): void {
this.format((response) => {

@@ -32,4 +28,3 @@ callback(response);

*/
private format(callback: (device: Device) => void): any
{
private format(callback: (device: Device) => void): void {
let device = {

@@ -39,3 +34,6 @@ ipAddress: this.info.address,

identity: '',
version: ''
version: '',
platform: '',
uptime: 0,
board: ''
};

@@ -46,38 +44,43 @@

*/
let first_byte = 8;
this.decode(first_byte).then((response) => {
device.macAddress = buf2hex(response.buffer);
first_byte += response.length + 4;
return this.decode(first_byte);
}).then((response) => {
device.identity = bin2String(response.buffer);
first_byte += response.length + 4;
return this.decode(first_byte);
}).then((response) => {
device.version = response.buffer.toString();
}).then(() => {
callback(device);
})
}
let bufferLength = this.msg.buffer.byteLength;
let offset = 4;
while (offset + 4 < bufferLength) {
let attrHead = Buffer.from(this.msg.buffer.slice(offset, offset + 4));
let attrType = attrHead.readUInt16BE(0);
let attrLength = attrHead.readUInt16BE(2);
offset += 4;
if (offset + attrLength > bufferLength){
console.warn('invalid mndp packet: attribute too long');
break;
}
/**
* Decode the length / the value
* @param start Byte to start
* @param callback
*/
private decode(start: number): Promise<DecodeOutput>
{
return new Promise((resolve:any, reject:any) => {
let lengthArray: Buffer = new Buffer(this.msg.buffer.slice(start - 2, start));
let length = lengthArray.readIntBE(0,lengthArray.byteLength);
let item: Buffer = new Buffer(this.msg.slice(start, start + length));
resolve({
buffer: item,
length: length
});
})
switch (attrType) {
case 1: // mac address
device.macAddress = buf2hex(this.msg.subarray(offset, offset + attrLength));
break;
case 5: // identity
device.identity = bin2String(this.msg.subarray(offset, offset + attrLength));
break;
case 7: // version
device.version = bin2String(this.msg.subarray(offset, offset + attrLength));
break;
case 8: // platform
device.platform = bin2String(this.msg.subarray(offset, offset + attrLength));
break;
case 10: // uptime
device.uptime = Buffer.from(this.msg.slice(offset, offset + attrLength)).readUInt32LE(0);
break;
case 12: // board
device.board = bin2String(this.msg.subarray(offset, offset + attrLength));
break;
default: // unknown type
console.debug('unknown mndp message type', attrType);
break;
}
offset += attrLength;
}
callback(device);
}
}

@@ -19,2 +19,3 @@ import * as dgram from "dgram";

host: undefined | string;
started: undefined | boolean;
version: dgram.SocketType;

@@ -30,2 +31,4 @@

this.host = options.host || this.default.host;
this.started = false;

@@ -42,2 +45,3 @@ this.registerListeners();

if (this.server) {
this.started = true;
this.server.bind(this.port, this.host)

@@ -52,4 +56,5 @@ }

{
if (this.server) {
if (this.server && this.started) {
this.server.close();
this.started = false;
}

@@ -56,0 +61,0 @@ }

@@ -6,2 +6,5 @@ export interface Device {

identity: string;
platform: string;
uptime: number;
board: string;
}
{
"name": "node-mndp",
"version": "0.0.2",
"version": "0.0.3",
"description": "A Mikrotik Network Discovery Protocol in Node",

@@ -5,0 +5,0 @@ "main": "./dist/index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc