From ee5aea54433831513676c43f886e881e1811a6a0 Mon Sep 17 00:00:00 2001 From: n1474335 Date: Fri, 10 Feb 2017 11:57:23 +0000 Subject: [PATCH] Added 'Encode NetBIOS Name' and 'Decode NetBIOS Name' operations --- src/js/config/Categories.js | 2 ++ src/js/config/OperationConfig.js | 26 +++++++++++++++ src/js/operations/NetBIOS.js | 57 ++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 src/js/operations/NetBIOS.js diff --git a/src/js/config/Categories.js b/src/js/config/Categories.js index a1aa43de..7de55d46 100755 --- a/src/js/config/Categories.js +++ b/src/js/config/Categories.js @@ -131,6 +131,8 @@ var Categories = [ "Format MAC addresses", "Change IP format", "Group IP addresses", + "Encode NetBIOS Name", + "Decode NetBIOS Name", ] }, { diff --git a/src/js/config/OperationConfig.js b/src/js/config/OperationConfig.js index 70a032c6..9ca8a134 100755 --- a/src/js/config/OperationConfig.js +++ b/src/js/config/OperationConfig.js @@ -1536,6 +1536,32 @@ var OperationConfig = { } ] }, + "Encode NetBIOS Name": { + description: "NetBIOS names as seen across the client interface to NetBIOS are exactly 16 bytes long. Within the NetBIOS-over-TCP protocols, a longer representation is used.

There are two levels of encoding. The first level maps a NetBIOS name into a domain system name. The second level maps the domain system name into the 'compressed' representation required for interaction with the domain name system.

This operation carries out the first level of encoding. See RFC 1001 for full details.", + run: NetBIOS.runEncodeName, + inputType: "byteArray", + outputType: "byteArray", + args: [ + { + name: "Offset", + type: "number", + value: NetBIOS.OFFSET + } + ] + }, + "Decode NetBIOS Name": { + description: "NetBIOS names as seen across the client interface to NetBIOS are exactly 16 bytes long. Within the NetBIOS-over-TCP protocols, a longer representation is used.

There are two levels of encoding. The first level maps a NetBIOS name into a domain system name. The second level maps the domain system name into the 'compressed' representation required for interaction with the domain name system.

This operation decodes the first level of encoding. See RFC 1001 for full details.", + run: NetBIOS.runDecodeName, + inputType: "byteArray", + outputType: "byteArray", + args: [ + { + name: "Offset", + type: "number", + value: NetBIOS.OFFSET + } + ] + }, "Offset checker": { description: "Compares multiple inputs (separated by the specified delimiter) and highlights matching characters which appear at the same position in all samples.", run: StrUtils.runOffsetChecker, diff --git a/src/js/operations/NetBIOS.js b/src/js/operations/NetBIOS.js new file mode 100644 index 00000000..58d69cb6 --- /dev/null +++ b/src/js/operations/NetBIOS.js @@ -0,0 +1,57 @@ +/** + * NetBIOS operations. + * + * @author n1474335 [n1474335@gmail.com] + * @copyright Crown Copyright 2017 + * @license Apache-2.0 + * + * @namespace + */ +var NetBIOS = { + + /** + * @constant + * @default + */ + OFFSET: 65, + + /** + * Encode NetBIOS Name operation. + * + * @param {byteArray} input + * @param {Object[]} args + * @returns {byteArray} + */ + runEncodeName: function(input, args) { + var output = [], + offset = args[0]; + + for (var i = 0; i < input.length; i++) { + output.push((input[i] >> 4) + offset); + output.push((input[i] & 0xf) + offset); + } + + return output; + }, + + + /** + * Decode NetBIOS Name operation. + * + * @param {byteArray} input + * @param {Object[]} args + * @returns {byteArray} + */ + runDecodeName: function(input, args) { + var output = [], + offset = args[0]; + + for (var i = 0; i < input.length; i += 2) { + output.push(((input[i] - offset) << 4) | + ((input[i + 1] - offset) & 0xf)); + } + + return output; + }, + +};