/fanger

An npm package to defang and refang IoC

Primary LanguageTypeScriptMIT LicenseMIT

fanger

npm version Node.js CI CodeFactor Coverage Status

fanger is an npm package for defang and refang IoC.

What are defang and refang

Defang means to change a part of IoC to make inaccessible or unclickable. (e.g. example.com => example[.]com)

Refang means to revert a defanged IoC to the original one. (e.g. example[.]com => example.com)

Installation

npm install fanger -g

Usage

As a CLI

$ echo "example.com" | defang
example[.]com

$ echo "test@example.com" | defang
test@example[.]com

$ echo "https://example.com" | defang
hxxps://example[.]com
$ echo "example[.]com" | refang
example.com

$ echo "test@example[.]com" | refang
test@example.com

$ echo "hxxps://example[.]com" | refang
https://example.com

As a library

import { defang, refang } from "fanger";

const text = "example.com";
console.log(defang(text));
// example[.]com

const defangedText = "example[.]com";
console.log(refang(defangedText));
// example.com

Supported defang/refang techniques

Defang

The following defang techniques are supported.

IPv4

  • 1.1.1.1 => 1[.]1.1.1

The first dot of an IPv4 will be replaced with [.].

Domain

  • example.com => example[.]com
  • test.com.example.com => test[.]com.example[.]com

A dot before a label which is registered as a TLD will be replaced with [.].

HTTP scheme

  • http => hxxp
  • https => hxxps

Supported refang techniques

The following refang techniques are supported.

Techniques Defanged Refanged
Remove spaces 1.1.1 . 1 1.1.1.1
[.] => . 1.1.1[.]1 1.1.1.1
(.) => . 1.1.1(.)1 1.1.1.1
{.} => . 1.1.1{.}1 1.1.1.1
\. => . example\.com example.com
[/] => / http://example.com[/]path http://example.com/path
[:] => : http[:]//example.com http://example.com
[://] => :// http[://]example.com http://example.com
hxxp => http hxxps://google.com https://google.com
[at] => @ test[at]example.com test@example.com
[@] => @ test[@]example.com test@example.com
(@) => @ test(@)example.com test@example.com
[dot] => . test@example[dot]com test@example.com
(dot) => . test@example(dot)com test@example.com
{dot} => . test@example{dot}com test@example.com
Partial 1.1.1[.1 1.1.1.1
Any combination hxxps[:]//test\.example[.)com[/]path https://test.example.com/path