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; + }, + +};