/** * @author h345983745 * @copyright Crown Copyright 2019 * @license Apache-2.0 */ import Operation from "../Operation"; /** * Defang IP operation */ class DefangIP extends Operation { /** * DefangIP constructor */ constructor() { super(); this.name = "Defang IP"; this.module = "Default"; this.description = "Takes a IPV4 or IPV6 address and 'Defangs' it; meaning the IP becomes invalid, removing the risk of accidentally utilising it as an IP address."; this.infoURL = "https://isc.sans.edu/forums/diary/Defang+all+the+things/22744/"; this.inputType = "string"; this.outputType = "string"; this.args = []; } /** * @param {string} input * @param {Object[]} args * @returns {string} */ run(input, args) { input = input.replace(IPV4_REGEX, x => { return x.replace(/\./g, "[.]"); }); input = input.replace(IPV6_REGEX, x => { return x.replace(/:/g, "[:]"); }); return input; } } export default DefangIP; /** * IPV4 regular expression */ const IPV4_REGEX = new RegExp("(?:(?:\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d|\\d)(?:\\/\\d{1,2})?", "g"); /** * IPV6 regular expression */ const IPV6_REGEX = new RegExp("((?=.*::)(?!.*::.+::)(::)?([\\dA-Fa-f]{1,4}:(:|\\b)|){5}|([\\dA-Fa-f]{1,4}:){6})((([\\dA-Fa-f]{1,4}((?!\\3)::|:\\b|(?![\\dA-Fa-f])))|(?!\\2\\3)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4})", "g");