diff --git a/.flake8 b/.flake8
index e48b7a6..6964a09 100644
--- a/.flake8
+++ b/.flake8
@@ -1,5 +1,5 @@
[flake8]
-max-line-length = 100
+max-line-length = 88
select = C,E,F,W,B,B950
ignore = E203, E501, W503
max-complexity = 13
\ No newline at end of file
diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml
index 0fdb52f..abe3207 100644
--- a/.github/workflows/pythonapp.yml
+++ b/.github/workflows/pythonapp.yml
@@ -28,7 +28,7 @@ jobs:
with:
args: ". --check"
- test:
+ test-install:
runs-on: ubuntu-latest
@@ -48,4 +48,24 @@ jobs:
- name: Test with pytest
run: |
pipenv install pytest
- pipenv run python -m pytest tests/
+ pipenv run python -m pytest tests/test_install
+
+ test-recon:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set up Python 3.7
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.7
+ - name: Set up pipenv
+ run: |
+ python -m pip install --upgrade pip
+ pip install pipenv
+ pipenv install -d
+ - name: Test with pytest
+ run: |
+ pipenv install pytest
+ pipenv run python -m pytest tests/test_recon
diff --git a/pyproject.toml b/pyproject.toml
index b9a2926..b3600fa 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,4 +1,4 @@
[tool.black]
-line-length = 100
+line-length = 88
include = '\.pyi?$'
exclude = '.*config.*py$|\.git'
\ No newline at end of file
diff --git a/recon-pipeline.py b/recon-pipeline.py
index 681a6a4..8927009 100755
--- a/recon-pipeline.py
+++ b/recon-pipeline.py
@@ -12,7 +12,9 @@
__version__ = "0.7.3"
# fix up the PYTHONPATH so we can simply execute the shell from wherever in the filesystem
-os.environ["PYTHONPATH"] = f"{os.environ.get('PYTHONPATH')}:{str(Path(__file__).parent.resolve())}"
+os.environ[
+ "PYTHONPATH"
+] = f"{os.environ.get('PYTHONPATH')}:{str(Path(__file__).parent.resolve())}"
# suppress "You should consider upgrading via the 'pip install --upgrade pip' command." warning
os.environ["PIP_DISABLE_PIP_VERSION_CHECK"] = "1"
@@ -113,7 +115,9 @@ def _luigi_pretty_printer(self, stderr):
words = output.split()
- self.async_alert(style(f"[-] {words[5].split('_')[0]} queued", fg="bright_white"))
+ self.async_alert(
+ style(f"[-] {words[5].split('_')[0]} queued", fg="bright_white")
+ )
elif output.startswith("INFO: ") and "running" in output:
# luigi Task is currently running
@@ -130,7 +134,9 @@ def _luigi_pretty_printer(self, stderr):
words = output.split()
- self.async_alert(style(f"[+] {words[5].split('_')[0]} complete!", fg="bright_green"))
+ self.async_alert(
+ style(f"[+] {words[5].split('_')[0]} complete!", fg="bright_green")
+ )
@cmd2.with_argparser(scan_parser)
def do_scan(self, args):
@@ -166,10 +172,14 @@ def do_scan(self, args):
subprocess.run(command)
else:
# suppress luigi messages in favor of less verbose/cleaner output
- proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
+ proc = subprocess.Popen(
+ command, stderr=subprocess.PIPE, stdout=subprocess.PIPE
+ )
# add stderr to the selector loop for processing when there's something to read from the fd
- selector.register(proc.stderr, selectors.EVENT_READ, self._luigi_pretty_printer)
+ selector.register(
+ proc.stderr, selectors.EVENT_READ, self._luigi_pretty_printer
+ )
@cmd2.with_argparser(install_parser)
def do_install(self, args):
@@ -220,14 +230,18 @@ def do_install(self, args):
self.do_install(dependency)
if tools.get(args.tool).get("installed"):
- return self.async_alert(style(f"[!] {args.tool} is already installed.", fg="yellow"))
+ return self.async_alert(
+ style(f"[!] {args.tool} is already installed.", fg="yellow")
+ )
else:
# list of return values from commands run during each tool installation
# used to determine whether the tool installed correctly or not
retvals = list()
- self.async_alert(style(f"[*] Installing {args.tool}...", fg="bright_yellow"))
+ self.async_alert(
+ style(f"[*] Installing {args.tool}...", fg="bright_yellow")
+ )
for command in tools.get(args.tool).get("commands"):
# run all commands required to install the tool
@@ -239,13 +253,18 @@ def do_install(self, args):
# go tools use subshells (cmd1 && cmd2 && cmd3 ...) during install, so need shell=True
proc = subprocess.Popen(
- command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ command,
+ shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
)
else:
# "normal" command, split up the string as usual and run it
proc = subprocess.Popen(
- shlex.split(command), stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ shlex.split(command),
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
)
out, err = proc.communicate()
diff --git a/recon/__init__.py b/recon/__init__.py
index ce14559..65d8f69 100644
--- a/recon/__init__.py
+++ b/recon/__init__.py
@@ -141,7 +141,9 @@ def get_scans():
# recursively walk packages; import each module in each package
# walk_packages yields ModuleInfo objects for all modules recursively on path
# prefix is a string to output on the front of every module name on output.
- for loader, module_name, is_pkg in pkgutil.walk_packages(path=recon.__path__, prefix="recon."):
+ for loader, module_name, is_pkg in pkgutil.walk_packages(
+ path=recon.__path__, prefix="recon."
+ ):
importlib.import_module(module_name)
# walk all modules, grabbing classes that we've written and add them to the classlist defaultdict
@@ -184,7 +186,9 @@ def get_scans():
help="directory in which to save scan results",
)
scan_parser.add_argument(
- "--wordlist", completer_method=cmd2.Cmd.path_complete, help="path to wordlist used by gobuster",
+ "--wordlist",
+ completer_method=cmd2.Cmd.path_complete,
+ help="path to wordlist used by gobuster",
)
scan_parser.add_argument(
"--interface",
@@ -200,14 +204,19 @@ def get_scans():
help="ports to scan as specified by nmap's list of top-ports (only meaningful to around 5000)",
)
scan_parser.add_argument(
- "--ports", help="port specification for masscan (all ports example: 1-65535,U:1-65535)",
+ "--ports",
+ help="port specification for masscan (all ports example: 1-65535,U:1-65535)",
)
scan_parser.add_argument(
"--threads", help="number of threads for all of the threaded applications to use"
)
scan_parser.add_argument("--scan-timeout", help="scan timeout for aquatone")
-scan_parser.add_argument("--proxy", help="proxy for gobuster if desired (ex. 127.0.0.1:8080)")
-scan_parser.add_argument("--extensions", help="list of extensions for gobuster (ex. asp,html,aspx)")
+scan_parser.add_argument(
+ "--proxy", help="proxy for gobuster if desired (ex. 127.0.0.1:8080)"
+)
+scan_parser.add_argument(
+ "--extensions", help="list of extensions for gobuster (ex. asp,html,aspx)"
+)
scan_parser.add_argument(
"--local-scheduler",
action="store_true",
diff --git a/recon/amass.py b/recon/amass.py
index a40bf64..f133a41 100644
--- a/recon/amass.py
+++ b/recon/amass.py
@@ -1,5 +1,6 @@
import json
import ipaddress
+from pathlib import Path
import luigi
from luigi.util import inherits
@@ -52,12 +53,16 @@ def requires(self):
def output(self):
""" Returns the target output for this task.
- Naming convention for the output file is amass.TARGET_FILE.json.
+ Naming convention for the output file is amass.json.
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/amass.{self.target_file}.json")
+ results_subfolder = Path(self.results_dir) / "amass-results"
+
+ new_path = results_subfolder / "amass.json"
+
+ return luigi.LocalTarget(new_path.resolve())
def program_args(self):
""" Defines the options/arguments sent to amass after processing.
@@ -65,7 +70,9 @@ def program_args(self):
Returns:
list: list of options/arguments, beginning with the name of the executable to run
"""
- print(f"debug-epi: amass {self.results_dir}")
+
+ Path(self.output().path).parent.mkdir(parents=True, exist_ok=True)
+
if not self.input().path.endswith("domains"):
return f"touch {self.output().path}".split()
@@ -128,12 +135,16 @@ def output(self):
Returns:
dict(str: luigi.local_target.LocalTarget)
"""
+ results_subfolder = Path(self.results_dir) / "target-results"
+
+ ips = (results_subfolder / "ipv4_addresses").resolve()
+ ip6s = ips.with_name("ipv6_addresses").resolve()
+ subdomains = ips.with_name("subdomains").resolve()
+
return {
- "target-ips": luigi.LocalTarget(f"{self.results_dir}/{self.target_file}.ips"),
- "target-ip6s": luigi.LocalTarget(f"{self.results_dir}/{self.target_file}.ip6s"),
- "target-subdomains": luigi.LocalTarget(
- f"{self.results_dir}/{self.target_file}.subdomains"
- ),
+ "target-ips": luigi.LocalTarget(ips),
+ "target-ip6s": luigi.LocalTarget(ip6s),
+ "target-subdomains": luigi.LocalTarget(subdomains),
}
def run(self):
@@ -160,6 +171,10 @@ def run(self):
unique_ip6s = set()
unique_subs = set()
+ Path(self.output().get("target-ips").path).parent.mkdir(
+ parents=True, exist_ok=True
+ )
+
amass_json = self.input().open()
ip_file = self.output().get("target-ips").open("w")
ip6_file = self.output().get("target-ip6s").open("w")
@@ -172,9 +187,13 @@ def run(self):
for address in entry.get("addresses"):
ipaddr = address.get("ip")
- if isinstance(ipaddress.ip_address(ipaddr), ipaddress.IPv4Address): # ipv4 addr
+ if isinstance(
+ ipaddress.ip_address(ipaddr), ipaddress.IPv4Address
+ ): # ipv4 addr
unique_ips.add(ipaddr)
- elif isinstance(ipaddress.ip_address(ipaddr), ipaddress.IPv6Address): # ipv6
+ elif isinstance(
+ ipaddress.ip_address(ipaddr), ipaddress.IPv6Address
+ ): # ipv6
unique_ip6s.add(ipaddr)
# send gathered results to their appropriate destination
diff --git a/recon/masscan.py b/recon/masscan.py
index abc8d20..b0fe0c4 100644
--- a/recon/masscan.py
+++ b/recon/masscan.py
@@ -2,6 +2,7 @@
import pickle
import logging
import subprocess
+from pathlib import Path
from collections import defaultdict
import luigi
@@ -49,7 +50,9 @@ class MasscanScan(luigi.Task):
rate = luigi.Parameter(default=defaults.get("masscan-rate", ""))
interface = luigi.Parameter(default=defaults.get("masscan-iface", ""))
- top_ports = luigi.IntParameter(default=0) # IntParameter -> top_ports expected as int
+ top_ports = luigi.IntParameter(
+ default=0
+ ) # IntParameter -> top_ports expected as int
ports = luigi.Parameter(default="")
def output(self):
@@ -60,7 +63,11 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/masscan.{self.target_file}.json")
+ results_subfolder = Path(self.results_dir) / "masscan-results"
+
+ new_path = results_subfolder / "masscan.json"
+
+ return luigi.LocalTarget(new_path.resolve())
def run(self):
""" Defines the options/arguments sent to masscan after processing.
@@ -68,7 +75,7 @@ def run(self):
Returns:
list: list of options/arguments, beginning with the name of the executable to run
"""
- print(f"debug-epi: masscan {self.results_dir}")
+
if self.ports and self.top_ports:
# can't have both
logging.error("Only --ports or --top-ports is permitted, not both.")
@@ -86,13 +93,21 @@ def run(self):
if self.top_ports:
# if --top-ports used, format the top_*_ports lists as strings and then into a proper masscan --ports option
- top_tcp_ports_str = ",".join(str(x) for x in top_tcp_ports[: self.top_ports])
- top_udp_ports_str = ",".join(str(x) for x in top_udp_ports[: self.top_ports])
+ top_tcp_ports_str = ",".join(
+ str(x) for x in top_tcp_ports[: self.top_ports]
+ )
+ top_udp_ports_str = ",".join(
+ str(x) for x in top_udp_ports[: self.top_ports]
+ )
self.ports = f"{top_tcp_ports_str},U:{top_udp_ports_str}"
self.top_ports = 0
- target_list = yield TargetList(target_file=self.target_file, results_dir=self.results_dir)
+ target_list = yield TargetList(
+ target_file=self.target_file, results_dir=self.results_dir
+ )
+
+ Path(self.output().path).parent.mkdir(parents=True, exist_ok=True)
if target_list.path.endswith("domains"):
yield ParseAmassOutput(
@@ -115,9 +130,13 @@ def run(self):
"--ports",
self.ports,
"-iL",
- target_list.path.replace("domains", "ips"),
]
+ if target_list.path.endswith("domains"):
+ command.append(target_list.path.replace("domains", "ipv4_addresses"))
+ else:
+ command.append(target_list.path.replace("domains", "ip_addresses"))
+
subprocess.run(command)
@@ -160,19 +179,26 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/masscan.{self.target_file}.parsed.pickle")
+ results_subfolder = Path(self.results_dir) / "masscan-results"
+
+ new_path = results_subfolder / "masscan.parsed.pickle"
+
+ return luigi.LocalTarget(new_path.resolve())
def run(self):
""" Reads masscan JSON results and creates a pickled dictionary of pertinent information for processing. """
ip_dict = defaultdict(lambda: defaultdict(set)) # nested defaultdict
try:
- entries = json.load(self.input().open()) # load masscan results from Masscan Task
+ # load masscan results from Masscan Task
+ entries = json.load(self.input().open())
except json.decoder.JSONDecodeError as e:
# return on exception; no output file created; pipeline should start again from
# this task if restarted because we never hit pickle.dump
return print(e)
+ Path(self.output().path).parent.mkdir(parents=True, exist_ok=True)
+
"""
build out ip_dictionary from the loaded JSON
diff --git a/recon/nmap.py b/recon/nmap.py
index e6399ad..a53257a 100644
--- a/recon/nmap.py
+++ b/recon/nmap.py
@@ -72,14 +72,18 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/nmap-{self.target_file}-results")
+ results_subfolder = Path(self.results_dir) / "nmap-results"
+
+ return luigi.LocalTarget(results_subfolder.resolve())
def run(self):
""" Parses pickled target info dictionary and runs targeted nmap scans against only open ports. """
try:
self.threads = abs(int(self.threads))
except TypeError:
- return logging.error("The value supplied to --threads must be a non-negative integer.")
+ return logging.error(
+ "The value supplied to --threads must be a non-negative integer."
+ )
ip_dict = pickle.load(open(self.input().path, "rb"))
@@ -117,7 +121,9 @@ def run(self):
# arg to -oA, will drop into subdir off curdir
tmp_cmd[10] = ",".join(ports)
- tmp_cmd.append(f"{self.output().path}/nmap.{target}-{protocol}")
+ tmp_cmd.append(
+ str(Path(self.output().path) / f"nmap.{target}-{protocol}")
+ )
tmp_cmd.append(target) # target as final arg to nmap
@@ -126,7 +132,9 @@ def run(self):
# basically mkdir -p, won't error out if already there
Path(self.output().path).mkdir(parents=True, exist_ok=True)
- with concurrent.futures.ThreadPoolExecutor(max_workers=self.threads) as executor:
+ with concurrent.futures.ThreadPoolExecutor(
+ max_workers=self.threads
+ ) as executor:
executor.map(subprocess.run, commands)
@@ -191,17 +199,27 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/searchsploit-{self.target_file}-results")
+ results_subfolder = Path(self.results_dir) / "searchsploit-results"
+
+ return luigi.LocalTarget(results_subfolder.resolve())
def run(self):
""" Grabs the xml files created by ThreadedNmap and runs searchsploit --nmap on each one, saving the output. """
+ Path(self.output().path).mkdir(parents=True, exist_ok=True)
+
for entry in Path(self.input().path).glob("nmap*.xml"):
- proc = subprocess.run(["searchsploit", "--nmap", str(entry)], stderr=subprocess.PIPE)
+ proc = subprocess.run(
+ ["searchsploit", "--nmap", str(entry)], stderr=subprocess.PIPE
+ )
if proc.stderr:
Path(self.output().path).mkdir(parents=True, exist_ok=True)
# change wall-searchsploit-results/nmap.10.10.10.157-tcp to 10.10.10.157
- target = entry.stem.replace("nmap.", "").replace("-tcp", "").replace("-udp", "")
+ target = (
+ entry.stem.replace("nmap.", "")
+ .replace("-tcp", "")
+ .replace("-udp", "")
+ )
Path(
f"{self.output().path}/searchsploit.{target}-{entry.stem[-3:]}.txt"
diff --git a/recon/targets.py b/recon/targets.py
index f885462..9971364 100644
--- a/recon/targets.py
+++ b/recon/targets.py
@@ -9,7 +9,7 @@
class TargetList(luigi.ExternalTask):
- """ External task. `TARGET_FILE` is generated manually by the user from target's scope.
+ """ External task. ``TARGET_FILE`` is generated manually by the user from target's scope.
Args:
results_dir: specifies the directory on disk to which all Task results are written
@@ -45,16 +45,17 @@ def output(self):
except ValueError as e:
# exception thrown by ip_interface; domain name assumed
logging.debug(e)
- with_suffix = self.target_file.with_suffix(".domains")
+ new_target = "domains"
else:
# no exception thrown; ip address found
- with_suffix = self.target_file.with_suffix(".ips")
+ new_target = "ip_addresses"
- self.results_dir.mkdir(parents=True, exist_ok=True)
+ results_subfolder = self.results_dir / "target-results"
- with_suffix = (Path(self.results_dir) / with_suffix).resolve()
+ results_subfolder.mkdir(parents=True, exist_ok=True)
- # copy file with new extension
- shutil.copy(self.target_file, with_suffix)
+ new_path = results_subfolder / new_target
- return luigi.LocalTarget(with_suffix)
+ shutil.copy(self.target_file, new_path.resolve())
+
+ return luigi.LocalTarget(new_path.resolve())
diff --git a/recon/web/aquatone.py b/recon/web/aquatone.py
index af48f69..455f856 100644
--- a/recon/web/aquatone.py
+++ b/recon/web/aquatone.py
@@ -74,7 +74,9 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/aquatone-{self.target_file}-results")
+ results_subfolder = Path(self.results_dir) / "aquatone-results"
+
+ return luigi.LocalTarget(results_subfolder.resolve())
def run(self):
""" Defines the options/arguments sent to aquatone after processing.
diff --git a/recon/web/corscanner.py b/recon/web/corscanner.py
index 5fb0d64..6c3771f 100644
--- a/recon/web/corscanner.py
+++ b/recon/web/corscanner.py
@@ -1,3 +1,5 @@
+from pathlib import Path
+
import luigi
from luigi.util import inherits
from luigi.contrib.external_program import ExternalProgramTask
@@ -69,7 +71,11 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/corscanner.{self.target_file}.json")
+ results_subfolder = Path(self.results_dir) / "corscanner-results"
+
+ new_path = results_subfolder / "corscanner.json"
+
+ return luigi.LocalTarget(new_path.resolve())
def program_args(self):
""" Defines the options/arguments sent to tko-subs after processing.
@@ -77,6 +83,7 @@ def program_args(self):
Returns:
list: list of options/arguments, beginning with the name of the executable to run
"""
+ Path(self.output().path).parent.mkdir(parents=True, exist_ok=True)
command = [
"python3",
diff --git a/recon/web/gobuster.py b/recon/web/gobuster.py
index adb28e7..ba7d00c 100644
--- a/recon/web/gobuster.py
+++ b/recon/web/gobuster.py
@@ -84,7 +84,9 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/gobuster-{self.target_file}-results")
+ results_subfolder = Path(self.results_dir) / "gobuster-results"
+
+ return luigi.LocalTarget(results_subfolder.resolve())
def run(self):
""" Defines the options/arguments sent to gobuster after processing.
@@ -95,7 +97,9 @@ def run(self):
try:
self.threads = abs(int(self.threads))
except TypeError:
- return logging.error("The value supplied to --threads must be a non-negative integer.")
+ return logging.error(
+ "The value supplied to --threads must be a non-negative integer."
+ )
commands = list()
@@ -104,7 +108,9 @@ def run(self):
target = target.strip()
try:
- if isinstance(ipaddress.ip_address(target), ipaddress.IPv6Address): # ipv6
+ if isinstance(
+ ipaddress.ip_address(target), ipaddress.IPv6Address
+ ): # ipv6
target = f"[{target}]"
except ValueError:
# domain names raise ValueErrors, just assume we have a domain and keep on keepin on
diff --git a/recon/web/subdomain_takeover.py b/recon/web/subdomain_takeover.py
index f6afca3..566cbd7 100644
--- a/recon/web/subdomain_takeover.py
+++ b/recon/web/subdomain_takeover.py
@@ -1,3 +1,5 @@
+from pathlib import Path
+
import luigi
from luigi.util import inherits
from luigi.contrib.external_program import ExternalProgramTask
@@ -66,7 +68,11 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/tkosubs.{self.target_file}.csv")
+ results_subfolder = Path(self.results_dir) / "tkosubs-results"
+
+ new_path = results_subfolder / "tkosubs.csv"
+
+ return luigi.LocalTarget(new_path.resolve())
def program_args(self):
""" Defines the options/arguments sent to tko-subs after processing.
@@ -74,6 +80,7 @@ def program_args(self):
Returns:
list: list of options/arguments, beginning with the name of the executable to run
"""
+ Path(self.output().path).parent.mkdir(parents=True, exist_ok=True)
command = [
tool_paths.get("tko-subs"),
@@ -148,7 +155,11 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/subjack.{self.target_file}.txt")
+ results_subfolder = Path(self.results_dir) / "subjack-results"
+
+ new_path = results_subfolder / "subjack.txt"
+
+ return luigi.LocalTarget(new_path.resolve())
def program_args(self):
""" Defines the options/arguments sent to subjack after processing.
@@ -156,6 +167,7 @@ def program_args(self):
Returns:
list: list of options/arguments, beginning with the name of the executable to run
"""
+ Path(self.output().path).parent.mkdir(parents=True, exist_ok=True)
command = [
tool_paths.get("subjack"),
diff --git a/recon/web/targets.py b/recon/web/targets.py
index 3d76493..e066e3f 100644
--- a/recon/web/targets.py
+++ b/recon/web/targets.py
@@ -1,4 +1,5 @@
import pickle
+from pathlib import Path
import luigi
from luigi.util import inherits
@@ -56,10 +57,16 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/webtargets.{self.target_file}.txt")
+ results_subfolder = Path(self.results_dir) / "target-results"
+
+ new_path = results_subfolder / "webtargets.txt"
+
+ return luigi.LocalTarget(new_path.resolve())
def run(self):
""" Gather all potential web targets into a single file to pass farther down the pipeline. """
+ Path(self.output().path).parent.mkdir(parents=True, exist_ok=True)
+
targets = set()
ip_dict = pickle.load(open(self.input().get("masscan-output").path, "rb"))
diff --git a/recon/web/webanalyze.py b/recon/web/webanalyze.py
index d4e879b..cdc15df 100644
--- a/recon/web/webanalyze.py
+++ b/recon/web/webanalyze.py
@@ -77,10 +77,14 @@ def output(self):
Returns:
luigi.local_target.LocalTarget
"""
- return luigi.LocalTarget(f"{self.results_dir}/webanalyze-{self.target_file}-results")
+ results_subfolder = Path(self.results_dir) / "webanalyze-results"
+
+ return luigi.LocalTarget(results_subfolder.resolve())
def _wrapped_subprocess(self, cmd):
- with open(f"webanalyze.{cmd[2].replace('//', '_').replace(':', '')}.txt", "wb") as f:
+ with open(
+ f"webanalyze.{cmd[2].replace('//', '_').replace(':', '')}.txt", "wb"
+ ) as f:
subprocess.run(cmd, stderr=f)
def run(self):
@@ -92,7 +96,9 @@ def run(self):
try:
self.threads = abs(int(self.threads))
except TypeError:
- return logging.error("The value supplied to --threads must be a non-negative integer.")
+ return logging.error(
+ "The value supplied to --threads must be a non-negative integer."
+ )
commands = list()
@@ -101,7 +107,9 @@ def run(self):
target = target.strip()
try:
- if isinstance(ipaddress.ip_address(target), ipaddress.IPv6Address): # ipv6
+ if isinstance(
+ ipaddress.ip_address(target), ipaddress.IPv6Address
+ ): # ipv6
target = f"[{target}]"
except ValueError:
# domain names raise ValueErrors, just assume we have a domain and keep on keepin on
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/data/bitdiscovery b/tests/data/bitdiscovery
new file mode 100644
index 0000000..3bf98ad
--- /dev/null
+++ b/tests/data/bitdiscovery
@@ -0,0 +1,2 @@
+bitdiscovery.com
+assetinventory.bugcrowd.com
diff --git a/tests/data/blacklist b/tests/data/blacklist
new file mode 100644
index 0000000..833c9a8
--- /dev/null
+++ b/tests/data/blacklist
@@ -0,0 +1 @@
+www.bitdiscovery.com
diff --git a/tests/data/recon-results/amass-results/amass.json b/tests/data/recon-results/amass-results/amass.json
new file mode 100644
index 0000000..8725a9d
--- /dev/null
+++ b/tests/data/recon-results/amass-results/amass.json
@@ -0,0 +1,5 @@
+{"name":"blog.bitdiscovery.com","domain":"bitdiscovery.com","addresses":[{"ip":"13.225.54.58","cidr":"13.225.48.0/21","asn":16509,"desc":"AMAZON-02"},{"ip":"13.225.54.100","cidr":"13.225.48.0/21","asn":16509,"desc":"AMAZON-02"},{"ip":"13.225.54.22","cidr":"13.225.48.0/21","asn":16509,"desc":"AMAZON-02"},{"ip":"13.225.54.41","cidr":"13.225.48.0/21","asn":16509,"desc":"AMAZON-02"}],"tag":"cert","source":"Crtsh"}
+{"name":"staging.bitdiscovery.com","domain":"bitdiscovery.com","addresses":[{"ip":"13.57.162.100","cidr":"13.57.0.0/16","asn":16509,"desc":"AMAZON-02"},{"ip":"52.9.23.177","cidr":"52.9.0.0/16","asn":16509,"desc":"AMAZON-02"}],"tag":"cert","source":"Crtsh"}
+{"name":"bitdiscovery.com","domain":"bitdiscovery.com","addresses":[{"ip":"52.53.92.161","cidr":"52.52.0.0/15","asn":16509,"desc":"AMAZON-02"},{"ip":"54.183.32.157","cidr":"54.183.0.0/17","asn":16509,"desc":"AMAZON-02"}],"tag":"cert","source":"Crtsh"}
+{"name":"tenable.bitdiscovery.com","domain":"bitdiscovery.com","addresses":[{"ip":"54.183.32.157","cidr":"54.183.0.0/17","asn":16509,"desc":"AMAZON-02"},{"ip":"52.53.92.161","cidr":"52.52.0.0/15","asn":16509,"desc":"AMAZON-02"}],"tag":"ext","source":"Previous Enum"}
+{"name":"ibm.bitdiscovery.com","domain":"bitdiscovery.com","addresses":[{"ip":"52.53.92.161","cidr":"52.52.0.0/15","asn":16509,"desc":"AMAZON-02"},{"ip":"54.183.32.157","cidr":"54.183.0.0/17","asn":16509,"desc":"AMAZON-02"}],"tag":"api","source":"VirusTotal"}
diff --git a/tests/data/recon-results/aquatone-results/aquatone_report.html b/tests/data/recon-results/aquatone-results/aquatone_report.html
new file mode 100644
index 0000000..bf713ce
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/aquatone_report.html
@@ -0,0 +1,739 @@
+
+
+
+
+
+
+
+
+
+
+ Aquatone Report
+
+
+
+
+
+
+
+ AQUATONE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Response Headers:
+
+
+
+
+
+
+
+
+
diff --git a/tests/data/recon-results/aquatone-results/aquatone_session.json b/tests/data/recon-results/aquatone-results/aquatone_session.json
new file mode 100644
index 0000000..b79cb11
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/aquatone_session.json
@@ -0,0 +1 @@
+{"version":"1.7.0","stats":{"startedAt":"2020-01-30T06:52:50.200521364-06:00","finishedAt":"2020-01-30T06:53:23.577789781-06:00","portOpen":42,"portClosed":83,"requestSuccessful":35,"requestFailed":7,"responseCode2xx":21,"responseCode3xx":0,"responseCode4xx":14,"responseCode5xx":0,"screenshotSuccessful":34,"screenshotFailed":1},"pages":{"http://104.20.60.51/":{"uuid":"14339640-ddbe-48f4-b216-e20e4f8c6862","url":"http://104.20.60.51/","hostname":"104.20.60.51","addrs":["104.20.60.51"],"status":"403 Forbidden","pageTitle":"","headersPath":"headers/http__104_20_60_51__42099b4af021e53f.txt","bodyPath":"html/http__104_20_60_51__42099b4af021e53f.html","screenshotPath":"screenshots/http__104_20_60_51__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Cf-Ray","value":"55d395da29c89b00-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/plain; charset=UTF-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cache-Control","value":"max-age=15","decreasesSecurity":false,"increasesSecurity":false},{"name":"Expires","value":"Thu, 30 Jan 2020 12:53:05 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Set-Cookie","value":"__cfduid=d14c6b3baccd1c79d90b8644153234cab1580388770; expires=Sat, 29-Feb-20 12:52:50 GMT; path=/; domain=.104.20.60.51; HttpOnly; SameSite=Lax","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"http://104.20.60.51:8080/":{"uuid":"6969940d-a1df-4412-ae5c-8fe26dc58436","url":"http://104.20.60.51:8080/","hostname":"104.20.60.51","addrs":["104.20.60.51"],"status":"403 Forbidden","pageTitle":"","headersPath":"headers/http__104_20_60_51__8080__42099b4af021e53f.txt","bodyPath":"html/http__104_20_60_51__8080__42099b4af021e53f.html","screenshotPath":"screenshots/http__104_20_60_51__8080__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"__cfduid=d00afdb739bc334f30bdce5225c5fbf2a1580388794; expires=Sat, 29-Feb-20 12:53:14 GMT; path=/; domain=.104.20.60.51; HttpOnly; SameSite=Lax","decreasesSecurity":false,"increasesSecurity":false},{"name":"Expires","value":"Thu, 30 Jan 2020 12:53:29 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d396708d6a9b66-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:53:14 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/plain; charset=UTF-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cache-Control","value":"max-age=15","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"http://104.20.61.51/":{"uuid":"e91d91d1-8509-4b62-8a5a-19e9060f0713","url":"http://104.20.61.51/","hostname":"104.20.61.51","addrs":["104.20.61.51"],"status":"403 Forbidden","pageTitle":"","headersPath":"headers/http__104_20_61_51__42099b4af021e53f.txt","bodyPath":"html/http__104_20_61_51__42099b4af021e53f.html","screenshotPath":"screenshots/http__104_20_61_51__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Cf-Ray","value":"55d395d7d89e9b6d-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cache-Control","value":"max-age=15","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/plain; charset=UTF-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"__cfduid=db2663a878a1015ad706caecc506caa6e1580388770; expires=Sat, 29-Feb-20 12:52:50 GMT; path=/; domain=.104.20.61.51; HttpOnly; SameSite=Lax","decreasesSecurity":false,"increasesSecurity":false},{"name":"Expires","value":"Thu, 30 Jan 2020 12:53:05 GMT","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"http://104.20.61.51:8080/":{"uuid":"43e43898-66a1-4f71-a3ea-566c2a25655c","url":"http://104.20.61.51:8080/","hostname":"104.20.61.51","addrs":["104.20.61.51"],"status":"403 Forbidden","pageTitle":"","headersPath":"headers/http__104_20_61_51__8080__42099b4af021e53f.txt","bodyPath":"html/http__104_20_61_51__8080__42099b4af021e53f.html","screenshotPath":"screenshots/http__104_20_61_51__8080__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Expires","value":"Thu, 30 Jan 2020 12:53:29 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d3966c8d23e037-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cache-Control","value":"max-age=15","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"__cfduid=df62cf2ddf06fcad8d69f0c66659e9ad41580388794; expires=Sat, 29-Feb-20 12:53:14 GMT; path=/; domain=.104.20.61.51; HttpOnly; SameSite=Lax","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:53:14 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/plain; charset=UTF-8","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"http://13.225.54.100/":{"uuid":"eb62ec2a-d781-46ae-a923-fca3c212d212","url":"http://13.225.54.100/","hostname":"13.225.54.100","addrs":["13.225.54.100"],"status":"403 Forbidden","pageTitle":"ERROR: The request could not be satisfied","headersPath":"headers/http__13_225_54_100__42099b4af021e53f.txt","bodyPath":"html/http__13_225_54_100__42099b4af021e53f.html","screenshotPath":"screenshots/http__13_225_54_100__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"Via","value":"1.1 352640e22fb9eaa800f19cb44307f5a5.cloudfront.net (CloudFront)","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Pop","value":"DFW50-C1","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Id","value":"CJywtobNprytTsObsL5aYgvX63VJBp2huOouDKa67X5WeD8M7P86Fg==","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"CloudFront","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Length","value":"915","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Cache","value":"Error from cloudfront","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Amazon Cloudfront","type":"info","link":"http://aws.amazon.com/cloudfront/","hash":"f1fbd77bc96e18c6434c0f483da45f2d87a552b7"}],"notes":null},"http://13.225.54.22/":{"uuid":"e6001f5c-1684-4da0-87c7-741cacee1997","url":"http://13.225.54.22/","hostname":"13.225.54.22","addrs":["13.225.54.22"],"status":"403 Forbidden","pageTitle":"ERROR: The request could not be satisfied","headersPath":"headers/http__13_225_54_22__42099b4af021e53f.txt","bodyPath":"html/http__13_225_54_22__42099b4af021e53f.html","screenshotPath":"screenshots/http__13_225_54_22__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"X-Amz-Cf-Id","value":"-xOcu_8pI1-7e-Csdxnud7wF8PONg2oAUSK91syAHyiZchM1Tmplag==","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"CloudFront","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"915","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Pop","value":"DFW50-C1","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Cache","value":"Error from cloudfront","decreasesSecurity":false,"increasesSecurity":false},{"name":"Via","value":"1.1 e21716effd81f9f72ae5593fe9fe54a0.cloudfront.net (CloudFront)","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Amazon Cloudfront","type":"info","link":"http://aws.amazon.com/cloudfront/","hash":"f1fbd77bc96e18c6434c0f483da45f2d87a552b7"}],"notes":null},"http://13.225.54.41/":{"uuid":"66308763-f138-4d73-bb5d-75e4d4464dd0","url":"http://13.225.54.41/","hostname":"13.225.54.41","addrs":["13.225.54.41"],"status":"403 Forbidden","pageTitle":"ERROR: The request could not be satisfied","headersPath":"headers/http__13_225_54_41__42099b4af021e53f.txt","bodyPath":"html/http__13_225_54_41__42099b4af021e53f.html","screenshotPath":"screenshots/http__13_225_54_41__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Server","value":"CloudFront","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"915","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Cache","value":"Error from cloudfront","decreasesSecurity":false,"increasesSecurity":false},{"name":"Via","value":"1.1 72c5987cf6b5170991873937a6e36b80.cloudfront.net (CloudFront)","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Id","value":"9UkQcHRfCNcH1pfvhSE7FDGCukT9YYhOuncVa89dNUfwqseLnS05jg==","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Pop","value":"DFW50-C1","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Amazon Cloudfront","type":"info","link":"http://aws.amazon.com/cloudfront/","hash":"f1fbd77bc96e18c6434c0f483da45f2d87a552b7"}],"notes":null},"http://13.225.54.58/":{"uuid":"a805084e-8cb2-4cdb-b96e-8ffdb74ce2a8","url":"http://13.225.54.58/","hostname":"13.225.54.58","addrs":["13.225.54.58"],"status":"403 Forbidden","pageTitle":"ERROR: The request could not be satisfied","headersPath":"headers/http__13_225_54_58__42099b4af021e53f.txt","bodyPath":"html/http__13_225_54_58__42099b4af021e53f.html","screenshotPath":"screenshots/http__13_225_54_58__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Content-Length","value":"915","decreasesSecurity":false,"increasesSecurity":false},{"name":"Via","value":"1.1 f69bec5206ff49623be64199d8902921.cloudfront.net (CloudFront)","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Pop","value":"DFW50-C1","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"CloudFront","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Cache","value":"Error from cloudfront","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Id","value":"nPLTLIpJUp_NKRKRKvHuaxC3OvSVusVNDKF97iRIxACgeWJuu3f4_w==","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Amazon Cloudfront","type":"info","link":"http://aws.amazon.com/cloudfront/","hash":"f1fbd77bc96e18c6434c0f483da45f2d87a552b7"}],"notes":null},"http://13.57.162.100/":{"uuid":"b17acd1d-afd4-449d-b970-bc9a1900f935","url":"http://13.57.162.100/","hostname":"13.57.162.100","addrs":["13.57.162.100"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/http__13_57_162_100__42099b4af021e53f.txt","bodyPath":"html/http__13_57_162_100__42099b4af021e53f.html","screenshotPath":"screenshots/http__13_57_162_100__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Server","value":"nginx/1.16.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"*","decreasesSecurity":true,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Set-Cookie","value":"connect.sid=s%3ACE4sYwUvG9fBBal0Ud-mp35YuejVagNj.VcA4FtYY05sXbWrrnAtvLnZ7WsHiRS5sByXtQGBT3%2B4; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"http://52.53.92.161/":{"uuid":"79e7d0ea-0bdb-4669-b868-ffb094ec5d58","url":"http://52.53.92.161/","hostname":"52.53.92.161","addrs":["52.53.92.161"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/http__52_53_92_161__42099b4af021e53f.txt","bodyPath":"html/http__52_53_92_161__42099b4af021e53f.html","screenshotPath":"screenshots/http__52_53_92_161__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Set-Cookie","value":"connect.sid=s%3AR0wSShSDItlj4pSEG8bn9V3sDs1u2ykG.zVdUwOhyGePqaOaDO9wotUpC4M6orzAGna9i%2FVNqVn0; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"http://52.9.23.177/":{"uuid":"d7a2391c-8101-4255-aef0-7becccc8e7a0","url":"http://52.9.23.177/","hostname":"52.9.23.177","addrs":["52.9.23.177"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/http__52_9_23_177__42099b4af021e53f.txt","bodyPath":"html/http__52_9_23_177__42099b4af021e53f.html","screenshotPath":"screenshots/http__52_9_23_177__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Server","value":"nginx/1.16.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"connect.sid=s%3AaucVLezKKP7aSHdiTuIpbYR7SOt_37do.B90p3nel1BvebCtsAQY0rYmUD5iP%2Byi%2FEzQUyDAYxKU; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"*","decreasesSecurity":true,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"http://54.183.32.157/":{"uuid":"42433754-80fc-451f-ada4-7c220b173a57","url":"http://54.183.32.157/","hostname":"54.183.32.157","addrs":["54.183.32.157"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/http__54_183_32_157__42099b4af021e53f.txt","bodyPath":"html/http__54_183_32_157__42099b4af021e53f.html","screenshotPath":"screenshots/http__54_183_32_157__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"connect.sid=s%3AkRMpS5rWgydPNOFHNnpO-d6y2cYpXQs8.KbUMKoT3E1UFUTh3c1gyQ14QJIUM2FerWOL%2FZoMSsGU; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"http://assetinventory.bugcrowd.com/":{"uuid":"b9112f62-1628-4e8f-ab6f-9e6543c3f0bf","url":"http://assetinventory.bugcrowd.com/","hostname":"assetinventory.bugcrowd.com","addrs":["104.20.60.51","104.20.61.51","2606:4700:10::6814:3d33","2606:4700:10::6814:3c33"],"status":"200 OK","pageTitle":"bugcrowd - Asset Inventory","headersPath":"headers/http__assetinventory_bugcrowd_com__42099b4af021e53f.txt","bodyPath":"html/http__assetinventory_bugcrowd_com__42099b4af021e53f.html","screenshotPath":"screenshots/http__assetinventory_bugcrowd_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"98b-DxNKqNImao/Lh9fDc6XPux2goAI\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"connect.sid=s%3A1-7W_IkU4og6MdJxbo5KO8U6nihVjbPt.%2BimEHMrrskOji%2F5v06yucbAyTBQjxDA1I9xZ3JsP1KQ; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Cache-Status","value":"DYNAMIC","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Expect-Ct","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d395d8eb5cec82-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"http://bitdiscovery.com/":{"uuid":"d86d8ca1-b72b-4ea3-93a9-00cd014f6c72","url":"http://bitdiscovery.com/","hostname":"bitdiscovery.com","addrs":["54.183.32.157","52.53.92.161"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/http__bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/http__bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/http__bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"connect.sid=s%3AU2QJG8DwxzthPOts0o3j6YMvaSU40th2.VVu865bLvxo%2FrpcW0Ppt9AoE0y5leWNRZrH5cH81nrk; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"http://blog.bitdiscovery.com/":{"uuid":"0224935f-5a6c-453d-bc6f-335f0ff09315","url":"http://blog.bitdiscovery.com/","hostname":"blog.bitdiscovery.com","addrs":["143.204.160.113","143.204.160.80","143.204.160.86","143.204.160.47"],"status":"200 OK","pageTitle":"Bit Discovery Blog -","headersPath":"headers/http__blog_bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/http__blog_bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/http__blog_bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Last-Modified","value":"Tue, 07 Jan 2020 23:08:55 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Via","value":"1.1 3c144798feb17858393699d5bea35bec.cloudfront.net (CloudFront)","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Id","value":"JSr5sPuURdveABSfXp1p47Sf_c5dAL1rkeYhkBLF2872xaZWkFV3PQ==","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 23 Jan 2020 15:51:21 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"AmazonS3","decreasesSecurity":true,"increasesSecurity":false},{"name":"X-Cache","value":"Hit from cloudfront","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Pop","value":"DFW3-C1","decreasesSecurity":false,"increasesSecurity":false},{"name":"Age","value":"59031","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Amazon Cloudfront","type":"info","link":"http://aws.amazon.com/cloudfront/","hash":"f1fbd77bc96e18c6434c0f483da45f2d87a552b7"},{"text":"Amazon S3","type":"info","link":"http://aws.amazon.com/s3/","hash":"901fe2969d6cd303e452f37668e45f094197e007"},{"text":"Google Font API","type":"info","link":"http://google.com/fonts","hash":"eeca1cac1d3c4856be7c3bdf554889341e16c738"},{"text":"WordPress","type":"info","link":"https://wordpress.org","hash":"a52bef2d19c06ff28d27be1ed14383fc8a3ce31d"},{"text":"jQuery","type":"info","link":"https://jquery.com","hash":"61ca870c2763b90da43197f43bf497893e9b1166"},{"text":"jQuery Migrate","type":"info","link":"https://github.com/jquery/jquery-migrate","hash":"8e6409adfb62d2e46014dbcb21585f311899771a"}],"notes":null},"http://email.assetinventory.bugcrowd.com/":{"uuid":"66b4e4f2-c168-4100-90e2-924e59408503","url":"http://email.assetinventory.bugcrowd.com/","hostname":"email.assetinventory.bugcrowd.com","addrs":["104.20.60.51","104.20.61.51","2606:4700:10::6814:3d33","2606:4700:10::6814:3c33"],"status":"200 OK","pageTitle":"","headersPath":"headers/http__email_assetinventory_bugcrowd_com__42099b4af021e53f.txt","bodyPath":"html/http__email_assetinventory_bugcrowd_com__42099b4af021e53f.html","screenshotPath":"","hasScreenshot":false,"headers":[{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"application/octet-stream","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"23","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"__cfduid=d4527bd6adbdf73c4650391cd8daec0171580388770; expires=Sat, 29-Feb-20 12:52:50 GMT; path=/; domain=.bugcrowd.com; HttpOnly; SameSite=Lax","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Cache-Status","value":"DYNAMIC","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d395d7aa10ecc7-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"http://ibm.bitdiscovery.com/":{"uuid":"3b2131d1-7b02-463f-b234-36b465b79e63","url":"http://ibm.bitdiscovery.com/","hostname":"ibm.bitdiscovery.com","addrs":["52.53.92.161","54.183.32.157"],"status":"200 OK","pageTitle":"IBM - Asset Inventory","headersPath":"headers/http__ibm_bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/http__ibm_bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/http__ibm_bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"987-PQVVlfC1QE5MlQyXJXFeaOUJCOU\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"connect.sid=s%3AOvGRFnchK7jEPl9WNJZbXgRy4g-Bi1Zr.H41E2tYE0rdEM7wwKDa7GVhbN7%2BMz5izAAoxAyVvmic; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"2439","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"http://staging.bitdiscovery.com/":{"uuid":"39acf2fb-d4ea-4683-a96f-8f5494a7681e","url":"http://staging.bitdiscovery.com/","hostname":"staging.bitdiscovery.com","addrs":["13.57.162.100","52.9.23.177"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/http__staging_bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/http__staging_bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/http__staging_bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Set-Cookie","value":"connect.sid=s%3AMIwP1tXxiW5IIB3gF_tg8UQiSP0vsjAy.ibe1bJViqYaPJ6BToXwKHZaEaj%2BjYvp7fxi4gtkNUYI; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Server","value":"nginx/1.16.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"*","decreasesSecurity":true,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"http://tenable.bitdiscovery.com/":{"uuid":"f049e260-725a-47f6-bc42-b3d934a686b9","url":"http://tenable.bitdiscovery.com/","hostname":"tenable.bitdiscovery.com","addrs":["52.53.92.161","54.183.32.157"],"status":"200 OK","pageTitle":"Tenable - Asset Inventory","headersPath":"headers/http__tenable_bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/http__tenable_bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/http__tenable_bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"984-uCOzKHNJY6hX57hkNMYtX3asDvw\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"2436","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Set-Cookie","value":"connect.sid=s%3A_UkfRDLj-4er22abmgolAmyj-T9y5cJV.ahsaXU07lpNSKpeYIhnyc4t6n9YhS38Po%2FbzUie6qsk; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"https://104.20.60.51/":{"uuid":"8a53a246-b4b1-4c85-a916-d21e8bba8f17","url":"https://104.20.60.51/","hostname":"104.20.60.51","addrs":["104.20.60.51"],"status":"403 Forbidden","pageTitle":"403 Forbidden","headersPath":"headers/https__104_20_60_51__42099b4af021e53f.txt","bodyPath":"html/https__104_20_60_51__42099b4af021e53f.html","screenshotPath":"screenshots/https__104_20_60_51__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"553","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d395e53a999afa-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:52 GMT","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"https://104.20.60.51:8443/":{"uuid":"a1b00581-a105-4e01-bb7c-5ca3e2d982b8","url":"https://104.20.60.51:8443/","hostname":"104.20.60.51","addrs":["104.20.60.51"],"status":"403 Forbidden","pageTitle":"403 Forbidden","headersPath":"headers/https__104_20_60_51__8443__42099b4af021e53f.txt","bodyPath":"html/https__104_20_60_51__8443__42099b4af021e53f.html","screenshotPath":"screenshots/https__104_20_60_51__8443__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:53:15 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"553","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d39675ceea5883-DFW","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"https://104.20.61.51/":{"uuid":"212eff3f-2b5e-4d07-8e86-45105610b459","url":"https://104.20.61.51/","hostname":"104.20.61.51","addrs":["104.20.61.51"],"status":"403 Forbidden","pageTitle":"403 Forbidden","headersPath":"headers/https__104_20_61_51__42099b4af021e53f.txt","bodyPath":"html/https__104_20_61_51__42099b4af021e53f.html","screenshotPath":"screenshots/https__104_20_61_51__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Content-Length","value":"151","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d395e0aea7d27e-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"https://104.20.61.51:8443/":{"uuid":"250c720f-2cc4-4baf-aa61-e07bd1894d2b","url":"https://104.20.61.51:8443/","hostname":"104.20.61.51","addrs":["104.20.61.51"],"status":"403 Forbidden","pageTitle":"403 Forbidden","headersPath":"headers/https__104_20_61_51__8443__42099b4af021e53f.txt","bodyPath":"html/https__104_20_61_51__8443__42099b4af021e53f.html","screenshotPath":"screenshots/https__104_20_61_51__8443__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d3967518401fec-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:53:15 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"151","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"https://13.57.162.100/":{"uuid":"008e4d4e-3237-4b78-83b2-a6f2b59ca6cb","url":"https://13.57.162.100/","hostname":"13.57.162.100","addrs":["13.57.162.100"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/https__13_57_162_100__42099b4af021e53f.txt","bodyPath":"html/https__13_57_162_100__42099b4af021e53f.html","screenshotPath":"screenshots/https__13_57_162_100__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Set-Cookie","value":"connect.sid=s%3ANI8ilMOt3ciRZXAHjA9C3eqv1jr4A3Cb.7RHKG1mNUvn%2Fl9GS%2FMlsAuCf630pMwvG2lfUS0M%2BjDs; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.16.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"*","decreasesSecurity":true,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"https://52.53.92.161/":{"uuid":"bc738026-9c81-440d-913a-7b78bee9de2e","url":"https://52.53.92.161/","hostname":"52.53.92.161","addrs":["52.53.92.161"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/https__52_53_92_161__42099b4af021e53f.txt","bodyPath":"html/https__52_53_92_161__42099b4af021e53f.html","screenshotPath":"screenshots/https__52_53_92_161__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Set-Cookie","value":"connect.sid=s%3AtA5DTfHM8jPwRteDQzepgSeHRM52bWHb.DPHJtCyQWRim9sfQmY9YlzKyNQpEclWrL7bt%2B8G6Gss; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:52 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"https://52.9.23.177/":{"uuid":"108b16c0-184e-43aa-884e-b25b50717531","url":"https://52.9.23.177/","hostname":"52.9.23.177","addrs":["52.9.23.177"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/https__52_9_23_177__42099b4af021e53f.txt","bodyPath":"html/https__52_9_23_177__42099b4af021e53f.html","screenshotPath":"screenshots/https__52_9_23_177__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.16.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"*","decreasesSecurity":true,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Set-Cookie","value":"connect.sid=s%3AcIC-bK1KNp8Ek9tdyo6EunQHvrX46WqB.vyi5KrQ%2FMDTq3BnCPRgGoiZG890MgFU0WgZ7OrzBSck; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:53 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"https://54.183.32.157/":{"uuid":"c0662547-c3de-4f43-98ca-e547af5bcfb1","url":"https://54.183.32.157/","hostname":"54.183.32.157","addrs":["54.183.32.157"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/https__54_183_32_157__42099b4af021e53f.txt","bodyPath":"html/https__54_183_32_157__42099b4af021e53f.html","screenshotPath":"screenshots/https__54_183_32_157__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Date","value":"Thu, 30 Jan 2020 12:52:52 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"connect.sid=s%3A6NnsmoeFwM8aem9Wpt8ypICFEn55-CCW.9PKi%2FLqLqMRr2IjOn0GZwEY5P5YIgonPLcL3nSA3kcw; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"https://assetinventory.bugcrowd.com/":{"uuid":"feb377ef-8657-4962-9e8b-448de96f9934","url":"https://assetinventory.bugcrowd.com/","hostname":"assetinventory.bugcrowd.com","addrs":["104.20.60.51","104.20.61.51","2606:4700:10::6814:3d33","2606:4700:10::6814:3c33"],"status":"200 OK","pageTitle":"bugcrowd - Asset Inventory","headersPath":"headers/https__assetinventory_bugcrowd_com__42099b4af021e53f.txt","bodyPath":"html/https__assetinventory_bugcrowd_com__42099b4af021e53f.html","screenshotPath":"screenshots/https__assetinventory_bugcrowd_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Expect-Ct","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"98b-DxNKqNImao/Lh9fDc6XPux2goAI\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d395ddaf7e9b8b-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"__cfduid=df21a9360f8b61f385a0e701fb497db861580388771; expires=Sat, 29-Feb-20 12:52:51 GMT; path=/; domain=.bugcrowd.com; HttpOnly; SameSite=Lax connect.sid=s%3AzOtKS_kdCJgTVEb2BylRcAIZzjPKsdP9.RCbh8I9%2BV8YZwln7sAZSIn%2B95uywEkczhtgMFgwEvDM; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Cache-Status","value":"DYNAMIC","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"https://bitdiscovery.com/":{"uuid":"5108cca1-0351-4d35-9403-5bd0a35f6407","url":"https://bitdiscovery.com/","hostname":"bitdiscovery.com","addrs":["54.183.32.157","52.53.92.161"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/https__bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/https__bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/https__bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"connect.sid=s%3AKAU8YE4ynxaz5b6XCnY5GoFeoXe0-v-s.AEJNoWe5gH83BowZIdV089fRkA7r3feWQLIqoFlOH1U; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:50 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"https://blog.bitdiscovery.com/":{"uuid":"4162c74a-4db7-4789-accf-e21d79db2afb","url":"https://blog.bitdiscovery.com/","hostname":"blog.bitdiscovery.com","addrs":["143.204.160.113","143.204.160.80","143.204.160.86","143.204.160.47"],"status":"200 OK","pageTitle":"Bit Discovery Blog -","headersPath":"headers/https__blog_bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/https__blog_bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/https__blog_bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Cache","value":"Hit from cloudfront","decreasesSecurity":false,"increasesSecurity":false},{"name":"Via","value":"1.1 9ecc03b2c7594e8fcc014b8995d49867.cloudfront.net (CloudFront)","decreasesSecurity":false,"increasesSecurity":false},{"name":"Last-Modified","value":"Tue, 07 Jan 2020 23:08:55 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"AmazonS3","decreasesSecurity":true,"increasesSecurity":false},{"name":"X-Amz-Cf-Pop","value":"DFW3-C1","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Amz-Cf-Id","value":"SOtOuWuytoUW9p_loGYjd1Yo6TUw7F1Ekj336a09u_rofx58sXt50w==","decreasesSecurity":false,"increasesSecurity":false},{"name":"Age","value":"59033","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 23 Jan 2020 15:51:21 GMT","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Amazon Cloudfront","type":"info","link":"http://aws.amazon.com/cloudfront/","hash":"f1fbd77bc96e18c6434c0f483da45f2d87a552b7"},{"text":"Amazon S3","type":"info","link":"http://aws.amazon.com/s3/","hash":"901fe2969d6cd303e452f37668e45f094197e007"},{"text":"Google Font API","type":"info","link":"http://google.com/fonts","hash":"eeca1cac1d3c4856be7c3bdf554889341e16c738"},{"text":"WordPress","type":"info","link":"https://wordpress.org","hash":"a52bef2d19c06ff28d27be1ed14383fc8a3ce31d"},{"text":"jQuery","type":"info","link":"https://jquery.com","hash":"61ca870c2763b90da43197f43bf497893e9b1166"},{"text":"jQuery Migrate","type":"info","link":"https://github.com/jquery/jquery-migrate","hash":"8e6409adfb62d2e46014dbcb21585f311899771a"}],"notes":null},"https://email.assetinventory.bugcrowd.com/":{"uuid":"93707b34-30c5-4459-bae7-993ac05defe1","url":"https://email.assetinventory.bugcrowd.com/","hostname":"email.assetinventory.bugcrowd.com","addrs":["104.20.60.51","104.20.61.51","2606:4700:10::6814:3d33","2606:4700:10::6814:3c33"],"status":"403 Forbidden","pageTitle":"403 Forbidden","headersPath":"headers/https__email_assetinventory_bugcrowd_com__42099b4af021e53f.txt","bodyPath":"html/https__email_assetinventory_bugcrowd_com__42099b4af021e53f.html","screenshotPath":"screenshots/https__email_assetinventory_bugcrowd_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Cf-Ray","value":"55d395dd2d7cec56-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"553","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"https://email.assetinventory.bugcrowd.com:8443/":{"uuid":"679b0dc7-02ea-483f-9e0a-3a5e6cdea4b6","url":"https://email.assetinventory.bugcrowd.com:8443/","hostname":"email.assetinventory.bugcrowd.com","addrs":["104.20.60.51","104.20.61.51","2606:4700:10::6814:3d33","2606:4700:10::6814:3c33"],"status":"403 Forbidden","pageTitle":"403 Forbidden","headersPath":"headers/https__email_assetinventory_bugcrowd_com__8443__42099b4af021e53f.txt","bodyPath":"html/https__email_assetinventory_bugcrowd_com__8443__42099b4af021e53f.html","screenshotPath":"screenshots/https__email_assetinventory_bugcrowd_com__8443__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Cf-Ray","value":"55d396727981d25a-DFW","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"cloudflare","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:53:15 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"553","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"CloudFlare","type":"info","link":"http://www.cloudflare.com","hash":"9ea92fc7dce5e740ccc8e64d8f9e3336a96efc2a"}],"notes":null},"https://ibm.bitdiscovery.com/":{"uuid":"23a044db-213c-4ea6-a7b7-b9ab5fbaa62d","url":"https://ibm.bitdiscovery.com/","hostname":"ibm.bitdiscovery.com","addrs":["52.53.92.161","54.183.32.157"],"status":"200 OK","pageTitle":"IBM - Asset Inventory","headersPath":"headers/https__ibm_bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/https__ibm_bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/https__ibm_bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"987-PQVVlfC1QE5MlQyXJXFeaOUJCOU\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Set-Cookie","value":"connect.sid=s%3ArRk1-dbTYunP69jeAiYXIdNQJun9ZBFj.u6G1ow8fgtYJQL3Ah2JuOo3svbf8blo4Gb061uxb7Gs; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Length","value":"2439","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"https://staging.bitdiscovery.com/":{"uuid":"3b5b1ae7-f055-4223-a15b-3fb26ef3c805","url":"https://staging.bitdiscovery.com/","hostname":"staging.bitdiscovery.com","addrs":["13.57.162.100","52.9.23.177"],"status":"200 OK","pageTitle":"Bit Discovery - Asset Inventory","headersPath":"headers/https__staging_bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/https__staging_bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/https__staging_bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Server","value":"nginx/1.16.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Content-Length","value":"11332","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"*","decreasesSecurity":true,"increasesSecurity":false},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Set-Cookie","value":"connect.sid=s%3Ar8vnLVUd4y48rA8ENClajkDuuuRir-CO.v80SepQPU0kff1FrFfflCF8tdBOBfIstOa05mXqfp4U; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:51 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE\"","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null},"https://tenable.bitdiscovery.com/":{"uuid":"3f79a26b-013c-429e-9d73-68560282b59d","url":"https://tenable.bitdiscovery.com/","hostname":"tenable.bitdiscovery.com","addrs":["52.53.92.161","54.183.32.157"],"status":"200 OK","pageTitle":"Tenable - Asset Inventory","headersPath":"headers/https__tenable_bitdiscovery_com__42099b4af021e53f.txt","bodyPath":"html/https__tenable_bitdiscovery_com__42099b4af021e53f.html","screenshotPath":"screenshots/https__tenable_bitdiscovery_com__42099b4af021e53f.png","hasScreenshot":true,"headers":[{"name":"Content-Length","value":"2436","decreasesSecurity":false,"increasesSecurity":false},{"name":"X-Xss-Protection","value":"1; mode=block","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Content-Type-Options","value":"nosniff","decreasesSecurity":false,"increasesSecurity":true},{"name":"Referrer-Policy","value":"origin-when-cross-origin","decreasesSecurity":false,"increasesSecurity":true},{"name":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains","decreasesSecurity":false,"increasesSecurity":true},{"name":"Set-Cookie","value":"connect.sid=s%3Azmu-FFUEwqffzuS6sU6VSSGhCGwUOrTj.EPhq0v8prw2jwq%2BF34Q02dYqtKETQ6LgbuBV8Ofp2Zc; Path=/; HttpOnly","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Origin","value":"https://bitdiscovery.com","decreasesSecurity":false,"increasesSecurity":false},{"name":"Access-Control-Allow-Headers","value":"X-Requested-With","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Type","value":"text/html; charset=utf-8","decreasesSecurity":false,"increasesSecurity":false},{"name":"Server","value":"nginx/1.12.1","decreasesSecurity":true,"increasesSecurity":false},{"name":"Date","value":"Thu, 30 Jan 2020 12:52:52 GMT","decreasesSecurity":false,"increasesSecurity":false},{"name":"Content-Security-Policy","value":"default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com","decreasesSecurity":false,"increasesSecurity":true},{"name":"X-Frame-Options","value":"SAMEORIGIN","decreasesSecurity":false,"increasesSecurity":true},{"name":"Etag","value":"W/\"984-uCOzKHNJY6hX57hkNMYtX3asDvw\"","decreasesSecurity":false,"increasesSecurity":false},{"name":"Retry-Count","value":"0","decreasesSecurity":false,"increasesSecurity":false},{"name":"Vary","value":"Accept-Encoding","decreasesSecurity":false,"increasesSecurity":false}],"tags":[{"text":"Nginx","type":"info","link":"http://nginx.org/en","hash":"c5f9bde4da1314a38cd29cddb1dd216b15d84c8e"}],"notes":null}},"pageSimilarityClusters":{"11905c72-fd18-43de-9133-99ba2a480e2b":["http://52.53.92.161/","https://staging.bitdiscovery.com/","https://52.53.92.161/","http://52.9.23.177/","https://52.9.23.177/","https://bitdiscovery.com/","http://13.57.162.100/","http://bitdiscovery.com/","http://54.183.32.157/","https://13.57.162.100/","https://54.183.32.157/","http://staging.bitdiscovery.com/"],"139fc2c4-0faa-4ae3-a6e4-0a1abe2418fa":["https://104.20.60.51:8443/","https://email.assetinventory.bugcrowd.com:8443/","https://104.20.61.51/","https://email.assetinventory.bugcrowd.com/","https://104.20.60.51/","https://104.20.61.51:8443/"],"7c884fa9-eab5-4b07-b3af-d22645c024db":["https://assetinventory.bugcrowd.com/","http://tenable.bitdiscovery.com/","https://tenable.bitdiscovery.com/","http://ibm.bitdiscovery.com/","http://assetinventory.bugcrowd.com/","https://ibm.bitdiscovery.com/"],"a6b9c161-0880-4ba5-9b29-019c1933f4c5":["http://104.20.61.51/","http://104.20.60.51/","http://104.20.61.51:8080/","http://104.20.60.51:8080/","http://email.assetinventory.bugcrowd.com/"],"cdbdfe99-c0fe-4067-8d45-7c06d6e041fb":["http://blog.bitdiscovery.com/","https://blog.bitdiscovery.com/"],"d12cd693-cc78-4ee4-9b2c-2a1221208a44":["http://13.225.54.41/","http://13.225.54.58/","http://13.225.54.22/","http://13.225.54.100/"]}}
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/aquatone_urls.txt b/tests/data/recon-results/aquatone-results/aquatone_urls.txt
new file mode 100644
index 0000000..b50593b
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/aquatone_urls.txt
@@ -0,0 +1,35 @@
+https://104.20.61.51:8443/
+http://assetinventory.bugcrowd.com/
+http://staging.bitdiscovery.com/
+https://ibm.bitdiscovery.com/
+https://blog.bitdiscovery.com/
+https://104.20.60.51/
+http://104.20.61.51/
+http://blog.bitdiscovery.com/
+http://104.20.60.51/
+http://13.225.54.41/
+http://13.225.54.58/
+http://52.53.92.161/
+https://assetinventory.bugcrowd.com/
+https://staging.bitdiscovery.com/
+https://52.53.92.161/
+https://104.20.60.51:8443/
+http://52.9.23.177/
+https://email.assetinventory.bugcrowd.com:8443/
+http://13.225.54.22/
+http://13.225.54.100/
+https://104.20.61.51/
+https://52.9.23.177/
+https://13.57.162.100/
+https://54.183.32.157/
+https://tenable.bitdiscovery.com/
+https://bitdiscovery.com/
+http://13.57.162.100/
+http://bitdiscovery.com/
+http://54.183.32.157/
+http://tenable.bitdiscovery.com/
+http://104.20.61.51:8080/
+http://104.20.60.51:8080/
+http://email.assetinventory.bugcrowd.com/
+http://ibm.bitdiscovery.com/
+https://email.assetinventory.bugcrowd.com/
diff --git a/tests/data/recon-results/aquatone-results/headers/http__104_20_60_51__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__104_20_60_51__42099b4af021e53f.txt
new file mode 100644
index 0000000..89a89af
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__104_20_60_51__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+403 Forbidden
+Cf-Ray: 55d395da29c89b00-DFW
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Type: text/plain; charset=UTF-8
+Retry-Count: 0
+Cache-Control: max-age=15
+Expires: Thu, 30 Jan 2020 12:53:05 GMT
+Server: cloudflare
+Set-Cookie: __cfduid=d14c6b3baccd1c79d90b8644153234cab1580388770; expires=Sat, 29-Feb-20 12:52:50 GMT; path=/; domain=.104.20.60.51; HttpOnly; SameSite=Lax
+Vary: Accept-Encoding
diff --git a/tests/data/recon-results/aquatone-results/headers/http__104_20_60_51__8080__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__104_20_60_51__8080__42099b4af021e53f.txt
new file mode 100644
index 0000000..2e3b40c
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__104_20_60_51__8080__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+403 Forbidden
+Vary: Accept-Encoding
+Retry-Count: 0
+Set-Cookie: __cfduid=d00afdb739bc334f30bdce5225c5fbf2a1580388794; expires=Sat, 29-Feb-20 12:53:14 GMT; path=/; domain=.104.20.60.51; HttpOnly; SameSite=Lax
+Expires: Thu, 30 Jan 2020 12:53:29 GMT
+Cf-Ray: 55d396708d6a9b66-DFW
+Date: Thu, 30 Jan 2020 12:53:14 GMT
+Content-Type: text/plain; charset=UTF-8
+Cache-Control: max-age=15
+Server: cloudflare
diff --git a/tests/data/recon-results/aquatone-results/headers/http__104_20_61_51__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__104_20_61_51__42099b4af021e53f.txt
new file mode 100644
index 0000000..6ea762c
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__104_20_61_51__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+403 Forbidden
+Cf-Ray: 55d395d7d89e9b6d-DFW
+Retry-Count: 0
+Cache-Control: max-age=15
+Vary: Accept-Encoding
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Type: text/plain; charset=UTF-8
+Set-Cookie: __cfduid=db2663a878a1015ad706caecc506caa6e1580388770; expires=Sat, 29-Feb-20 12:52:50 GMT; path=/; domain=.104.20.61.51; HttpOnly; SameSite=Lax
+Expires: Thu, 30 Jan 2020 12:53:05 GMT
diff --git a/tests/data/recon-results/aquatone-results/headers/http__104_20_61_51__8080__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__104_20_61_51__8080__42099b4af021e53f.txt
new file mode 100644
index 0000000..a878dd2
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__104_20_61_51__8080__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+403 Forbidden
+Expires: Thu, 30 Jan 2020 12:53:29 GMT
+Cf-Ray: 55d3966c8d23e037-DFW
+Retry-Count: 0
+Cache-Control: max-age=15
+Set-Cookie: __cfduid=df62cf2ddf06fcad8d69f0c66659e9ad41580388794; expires=Sat, 29-Feb-20 12:53:14 GMT; path=/; domain=.104.20.61.51; HttpOnly; SameSite=Lax
+Vary: Accept-Encoding
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:53:14 GMT
+Content-Type: text/plain; charset=UTF-8
diff --git a/tests/data/recon-results/aquatone-results/headers/http__13_225_54_100__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__13_225_54_100__42099b4af021e53f.txt
new file mode 100644
index 0000000..d921467
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__13_225_54_100__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+403 Forbidden
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Type: text/html
+Via: 1.1 352640e22fb9eaa800f19cb44307f5a5.cloudfront.net (CloudFront)
+X-Amz-Cf-Pop: DFW50-C1
+X-Amz-Cf-Id: CJywtobNprytTsObsL5aYgvX63VJBp2huOouDKa67X5WeD8M7P86Fg==
+Server: CloudFront
+Content-Length: 915
+Retry-Count: 0
+X-Cache: Error from cloudfront
diff --git a/tests/data/recon-results/aquatone-results/headers/http__13_225_54_22__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__13_225_54_22__42099b4af021e53f.txt
new file mode 100644
index 0000000..61940a2
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__13_225_54_22__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+403 Forbidden
+X-Amz-Cf-Id: -xOcu_8pI1-7e-Csdxnud7wF8PONg2oAUSK91syAHyiZchM1Tmplag==
+Server: CloudFront
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Length: 915
+X-Amz-Cf-Pop: DFW50-C1
+Content-Type: text/html
+X-Cache: Error from cloudfront
+Via: 1.1 e21716effd81f9f72ae5593fe9fe54a0.cloudfront.net (CloudFront)
+Retry-Count: 0
diff --git a/tests/data/recon-results/aquatone-results/headers/http__13_225_54_41__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__13_225_54_41__42099b4af021e53f.txt
new file mode 100644
index 0000000..a73f56d
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__13_225_54_41__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+403 Forbidden
+Server: CloudFront
+Content-Type: text/html
+Content-Length: 915
+X-Cache: Error from cloudfront
+Via: 1.1 72c5987cf6b5170991873937a6e36b80.cloudfront.net (CloudFront)
+X-Amz-Cf-Id: 9UkQcHRfCNcH1pfvhSE7FDGCukT9YYhOuncVa89dNUfwqseLnS05jg==
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Retry-Count: 0
+X-Amz-Cf-Pop: DFW50-C1
diff --git a/tests/data/recon-results/aquatone-results/headers/http__13_225_54_58__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__13_225_54_58__42099b4af021e53f.txt
new file mode 100644
index 0000000..b1ef0cb
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__13_225_54_58__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+403 Forbidden
+Content-Length: 915
+Via: 1.1 f69bec5206ff49623be64199d8902921.cloudfront.net (CloudFront)
+X-Amz-Cf-Pop: DFW50-C1
+Server: CloudFront
+Content-Type: text/html
+X-Cache: Error from cloudfront
+X-Amz-Cf-Id: nPLTLIpJUp_NKRKRKvHuaxC3OvSVusVNDKF97iRIxACgeWJuu3f4_w==
+Retry-Count: 0
+Date: Thu, 30 Jan 2020 12:52:50 GMT
diff --git a/tests/data/recon-results/aquatone-results/headers/http__13_57_162_100__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__13_57_162_100__42099b4af021e53f.txt
new file mode 100644
index 0000000..b6af60d
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__13_57_162_100__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Type: text/html; charset=utf-8
+Content-Length: 11332
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Retry-Count: 0
+Referrer-Policy: origin-when-cross-origin
+Server: nginx/1.16.1
+Access-Control-Allow-Headers: X-Requested-With
+X-Frame-Options: SAMEORIGIN
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Vary: Accept-Encoding
+Access-Control-Allow-Origin: *
+X-Content-Type-Options: nosniff
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+X-Xss-Protection: 1; mode=block
+Set-Cookie: connect.sid=s%3ACE4sYwUvG9fBBal0Ud-mp35YuejVagNj.VcA4FtYY05sXbWrrnAtvLnZ7WsHiRS5sByXtQGBT3%2B4; Path=/; HttpOnly
diff --git a/tests/data/recon-results/aquatone-results/headers/http__52_53_92_161__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__52_53_92_161__42099b4af021e53f.txt
new file mode 100644
index 0000000..5879d01
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__52_53_92_161__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Retry-Count: 0
+Server: nginx/1.12.1
+Content-Length: 11332
+Vary: Accept-Encoding
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Referrer-Policy: origin-when-cross-origin
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+X-Frame-Options: SAMEORIGIN
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+X-Xss-Protection: 1; mode=block
+Set-Cookie: connect.sid=s%3AR0wSShSDItlj4pSEG8bn9V3sDs1u2ykG.zVdUwOhyGePqaOaDO9wotUpC4M6orzAGna9i%2FVNqVn0; Path=/; HttpOnly
+Content-Type: text/html; charset=utf-8
+Access-Control-Allow-Headers: X-Requested-With
+X-Content-Type-Options: nosniff
diff --git a/tests/data/recon-results/aquatone-results/headers/http__52_9_23_177__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__52_9_23_177__42099b4af021e53f.txt
new file mode 100644
index 0000000..12e97e0
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__52_9_23_177__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+Retry-Count: 0
+Access-Control-Allow-Headers: X-Requested-With
+Referrer-Policy: origin-when-cross-origin
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Server: nginx/1.16.1
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Set-Cookie: connect.sid=s%3AaucVLezKKP7aSHdiTuIpbYR7SOt_37do.B90p3nel1BvebCtsAQY0rYmUD5iP%2Byi%2FEzQUyDAYxKU; Path=/; HttpOnly
+Content-Type: text/html; charset=utf-8
+Content-Length: 11332
+Vary: Accept-Encoding
+Access-Control-Allow-Origin: *
+X-Content-Type-Options: nosniff
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+X-Xss-Protection: 1; mode=block
+X-Frame-Options: SAMEORIGIN
diff --git a/tests/data/recon-results/aquatone-results/headers/http__54_183_32_157__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__54_183_32_157__42099b4af021e53f.txt
new file mode 100644
index 0000000..843e5fa
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__54_183_32_157__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+X-Content-Type-Options: nosniff
+X-Frame-Options: SAMEORIGIN
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Retry-Count: 0
+Server: nginx/1.12.1
+Content-Type: text/html; charset=utf-8
+Access-Control-Allow-Headers: X-Requested-With
+Set-Cookie: connect.sid=s%3AkRMpS5rWgydPNOFHNnpO-d6y2cYpXQs8.KbUMKoT3E1UFUTh3c1gyQ14QJIUM2FerWOL%2FZoMSsGU; Path=/; HttpOnly
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Referrer-Policy: origin-when-cross-origin
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+X-Xss-Protection: 1; mode=block
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+Content-Length: 11332
+Vary: Accept-Encoding
diff --git a/tests/data/recon-results/aquatone-results/headers/http__assetinventory_bugcrowd_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__assetinventory_bugcrowd_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..3624c01
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__assetinventory_bugcrowd_com__42099b4af021e53f.txt
@@ -0,0 +1,19 @@
+200 OK
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+X-Xss-Protection: 1; mode=block
+Referrer-Policy: origin-when-cross-origin
+Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
+Etag: W/"98b-DxNKqNImao/Lh9fDc6XPux2goAI"
+Set-Cookie: connect.sid=s%3A1-7W_IkU4og6MdJxbo5KO8U6nihVjbPt.%2BimEHMrrskOji%2F5v06yucbAyTBQjxDA1I9xZ3JsP1KQ; Path=/; HttpOnly
+Cf-Cache-Status: DYNAMIC
+Vary: Accept-Encoding
+X-Content-Type-Options: nosniff
+Expect-Ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
+Server: cloudflare
+Retry-Count: 0
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Type: text/html; charset=utf-8
+Access-Control-Allow-Headers: X-Requested-With
+Cf-Ray: 55d395d8eb5cec82-DFW
+Access-Control-Allow-Origin: https://bitdiscovery.com
+X-Frame-Options: SAMEORIGIN
diff --git a/tests/data/recon-results/aquatone-results/headers/http__bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..e932943
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Server: nginx/1.12.1
+Access-Control-Allow-Headers: X-Requested-With
+Retry-Count: 0
+X-Frame-Options: SAMEORIGIN
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Set-Cookie: connect.sid=s%3AU2QJG8DwxzthPOts0o3j6YMvaSU40th2.VVu865bLvxo%2FrpcW0Ppt9AoE0y5leWNRZrH5cH81nrk; Path=/; HttpOnly
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Content-Type: text/html; charset=utf-8
+Vary: Accept-Encoding
+X-Content-Type-Options: nosniff
+X-Xss-Protection: 1; mode=block
+Content-Length: 11332
+Referrer-Policy: origin-when-cross-origin
diff --git a/tests/data/recon-results/aquatone-results/headers/http__blog_bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__blog_bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..9c84f5b
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__blog_bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,12 @@
+200 OK
+Last-Modified: Tue, 07 Jan 2020 23:08:55 GMT
+Vary: Accept-Encoding
+Via: 1.1 3c144798feb17858393699d5bea35bec.cloudfront.net (CloudFront)
+X-Amz-Cf-Id: JSr5sPuURdveABSfXp1p47Sf_c5dAL1rkeYhkBLF2872xaZWkFV3PQ==
+Retry-Count: 0
+Date: Thu, 23 Jan 2020 15:51:21 GMT
+Server: AmazonS3
+X-Cache: Hit from cloudfront
+X-Amz-Cf-Pop: DFW3-C1
+Age: 59031
+Content-Type: text/html
diff --git a/tests/data/recon-results/aquatone-results/headers/http__email_assetinventory_bugcrowd_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__email_assetinventory_bugcrowd_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..63b08d5
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__email_assetinventory_bugcrowd_com__42099b4af021e53f.txt
@@ -0,0 +1,10 @@
+200 OK
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Type: application/octet-stream
+Content-Length: 23
+Set-Cookie: __cfduid=d4527bd6adbdf73c4650391cd8daec0171580388770; expires=Sat, 29-Feb-20 12:52:50 GMT; path=/; domain=.bugcrowd.com; HttpOnly; SameSite=Lax
+Cf-Cache-Status: DYNAMIC
+X-Content-Type-Options: nosniff
+Server: cloudflare
+Cf-Ray: 55d395d7aa10ecc7-DFW
+Retry-Count: 0
diff --git a/tests/data/recon-results/aquatone-results/headers/http__ibm_bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__ibm_bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..81d33e2
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__ibm_bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Access-Control-Allow-Headers: X-Requested-With
+X-Xss-Protection: 1; mode=block
+Referrer-Policy: origin-when-cross-origin
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Etag: W/"987-PQVVlfC1QE5MlQyXJXFeaOUJCOU"
+Set-Cookie: connect.sid=s%3AOvGRFnchK7jEPl9WNJZbXgRy4g-Bi1Zr.H41E2tYE0rdEM7wwKDa7GVhbN7%2BMz5izAAoxAyVvmic; Path=/; HttpOnly
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Type: text/html; charset=utf-8
+Content-Length: 2439
+Vary: Accept-Encoding
+X-Content-Type-Options: nosniff
+X-Frame-Options: SAMEORIGIN
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Retry-Count: 0
+Server: nginx/1.12.1
diff --git a/tests/data/recon-results/aquatone-results/headers/http__staging_bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__staging_bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..907899d
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__staging_bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Set-Cookie: connect.sid=s%3AMIwP1tXxiW5IIB3gF_tg8UQiSP0vsjAy.ibe1bJViqYaPJ6BToXwKHZaEaj%2BjYvp7fxi4gtkNUYI; Path=/; HttpOnly
+Retry-Count: 0
+X-Frame-Options: SAMEORIGIN
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Content-Type: text/html; charset=utf-8
+Vary: Accept-Encoding
+Access-Control-Allow-Headers: X-Requested-With
+Referrer-Policy: origin-when-cross-origin
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Server: nginx/1.16.1
+Access-Control-Allow-Origin: *
+X-Content-Type-Options: nosniff
+X-Xss-Protection: 1; mode=block
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Content-Length: 11332
diff --git a/tests/data/recon-results/aquatone-results/headers/http__tenable_bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/http__tenable_bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..4e6ef53
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/http__tenable_bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Access-Control-Allow-Headers: X-Requested-With
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+X-Frame-Options: SAMEORIGIN
+Content-Type: text/html; charset=utf-8
+Referrer-Policy: origin-when-cross-origin
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Etag: W/"984-uCOzKHNJY6hX57hkNMYtX3asDvw"
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+Content-Length: 2436
+Vary: Accept-Encoding
+X-Xss-Protection: 1; mode=block
+Set-Cookie: connect.sid=s%3A_UkfRDLj-4er22abmgolAmyj-T9y5cJV.ahsaXU07lpNSKpeYIhnyc4t6n9YhS38Po%2FbzUie6qsk; Path=/; HttpOnly
+Retry-Count: 0
+Server: nginx/1.12.1
+Access-Control-Allow-Origin: https://bitdiscovery.com
+X-Content-Type-Options: nosniff
diff --git a/tests/data/recon-results/aquatone-results/headers/https__104_20_60_51__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__104_20_60_51__42099b4af021e53f.txt
new file mode 100644
index 0000000..f75f679
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__104_20_60_51__42099b4af021e53f.txt
@@ -0,0 +1,7 @@
+403 Forbidden
+Content-Type: text/html
+Content-Length: 553
+Retry-Count: 0
+Cf-Ray: 55d395e53a999afa-DFW
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:52:52 GMT
diff --git a/tests/data/recon-results/aquatone-results/headers/https__104_20_60_51__8443__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__104_20_60_51__8443__42099b4af021e53f.txt
new file mode 100644
index 0000000..f45cdf4
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__104_20_60_51__8443__42099b4af021e53f.txt
@@ -0,0 +1,7 @@
+403 Forbidden
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:53:15 GMT
+Content-Type: text/html
+Content-Length: 553
+Retry-Count: 0
+Cf-Ray: 55d39675ceea5883-DFW
diff --git a/tests/data/recon-results/aquatone-results/headers/https__104_20_61_51__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__104_20_61_51__42099b4af021e53f.txt
new file mode 100644
index 0000000..cdacf87
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__104_20_61_51__42099b4af021e53f.txt
@@ -0,0 +1,7 @@
+403 Forbidden
+Content-Length: 151
+Retry-Count: 0
+Cf-Ray: 55d395e0aea7d27e-DFW
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+Content-Type: text/html
diff --git a/tests/data/recon-results/aquatone-results/headers/https__104_20_61_51__8443__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__104_20_61_51__8443__42099b4af021e53f.txt
new file mode 100644
index 0000000..685f6bf
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__104_20_61_51__8443__42099b4af021e53f.txt
@@ -0,0 +1,7 @@
+403 Forbidden
+Retry-Count: 0
+Cf-Ray: 55d3967518401fec-DFW
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:53:15 GMT
+Content-Type: text/html
+Content-Length: 151
diff --git a/tests/data/recon-results/aquatone-results/headers/https__13_57_162_100__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__13_57_162_100__42099b4af021e53f.txt
new file mode 100644
index 0000000..eb7419e
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__13_57_162_100__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Set-Cookie: connect.sid=s%3ANI8ilMOt3ciRZXAHjA9C3eqv1jr4A3Cb.7RHKG1mNUvn%2Fl9GS%2FMlsAuCf630pMwvG2lfUS0M%2BjDs; Path=/; HttpOnly
+X-Content-Type-Options: nosniff
+X-Frame-Options: SAMEORIGIN
+Referrer-Policy: origin-when-cross-origin
+X-Xss-Protection: 1; mode=block
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Retry-Count: 0
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+Content-Length: 11332
+Server: nginx/1.16.1
+Content-Type: text/html; charset=utf-8
+Access-Control-Allow-Origin: *
+Access-Control-Allow-Headers: X-Requested-With
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Vary: Accept-Encoding
diff --git a/tests/data/recon-results/aquatone-results/headers/https__52_53_92_161__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__52_53_92_161__42099b4af021e53f.txt
new file mode 100644
index 0000000..19ef079
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__52_53_92_161__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Content-Length: 11332
+X-Frame-Options: SAMEORIGIN
+Set-Cookie: connect.sid=s%3AtA5DTfHM8jPwRteDQzepgSeHRM52bWHb.DPHJtCyQWRim9sfQmY9YlzKyNQpEclWrL7bt%2B8G6Gss; Path=/; HttpOnly
+Server: nginx/1.12.1
+Content-Type: text/html; charset=utf-8
+Vary: Accept-Encoding
+Access-Control-Allow-Headers: X-Requested-With
+Retry-Count: 0
+Date: Thu, 30 Jan 2020 12:52:52 GMT
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+X-Content-Type-Options: nosniff
+Referrer-Policy: origin-when-cross-origin
+X-Xss-Protection: 1; mode=block
+Access-Control-Allow-Origin: https://bitdiscovery.com
diff --git a/tests/data/recon-results/aquatone-results/headers/https__52_9_23_177__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__52_9_23_177__42099b4af021e53f.txt
new file mode 100644
index 0000000..4a2640d
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__52_9_23_177__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Content-Type: text/html; charset=utf-8
+Content-Length: 11332
+Vary: Accept-Encoding
+Server: nginx/1.16.1
+Access-Control-Allow-Origin: *
+X-Content-Type-Options: nosniff
+Set-Cookie: connect.sid=s%3AcIC-bK1KNp8Ek9tdyo6EunQHvrX46WqB.vyi5KrQ%2FMDTq3BnCPRgGoiZG890MgFU0WgZ7OrzBSck; Path=/; HttpOnly
+X-Xss-Protection: 1; mode=block
+X-Frame-Options: SAMEORIGIN
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Date: Thu, 30 Jan 2020 12:52:53 GMT
+Access-Control-Allow-Headers: X-Requested-With
+Referrer-Policy: origin-when-cross-origin
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Retry-Count: 0
diff --git a/tests/data/recon-results/aquatone-results/headers/https__54_183_32_157__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__54_183_32_157__42099b4af021e53f.txt
new file mode 100644
index 0000000..1666e08
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__54_183_32_157__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Date: Thu, 30 Jan 2020 12:52:52 GMT
+Retry-Count: 0
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Access-Control-Allow-Headers: X-Requested-With
+Referrer-Policy: origin-when-cross-origin
+X-Frame-Options: SAMEORIGIN
+Vary: Accept-Encoding
+X-Content-Type-Options: nosniff
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+X-Xss-Protection: 1; mode=block
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Server: nginx/1.12.1
+Content-Type: text/html; charset=utf-8
+Content-Length: 11332
+Set-Cookie: connect.sid=s%3A6NnsmoeFwM8aem9Wpt8ypICFEn55-CCW.9PKi%2FLqLqMRr2IjOn0GZwEY5P5YIgonPLcL3nSA3kcw; Path=/; HttpOnly
diff --git a/tests/data/recon-results/aquatone-results/headers/https__assetinventory_bugcrowd_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__assetinventory_bugcrowd_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..d5a447e
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__assetinventory_bugcrowd_com__42099b4af021e53f.txt
@@ -0,0 +1,19 @@
+200 OK
+Expect-Ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Access-Control-Allow-Headers: X-Requested-With
+X-Xss-Protection: 1; mode=block
+Vary: Accept-Encoding
+X-Content-Type-Options: nosniff
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Etag: W/"98b-DxNKqNImao/Lh9fDc6XPux2goAI"
+Cf-Ray: 55d395ddaf7e9b8b-DFW
+Retry-Count: 0
+Set-Cookie: __cfduid=df21a9360f8b61f385a0e701fb497db861580388771; expires=Sat, 29-Feb-20 12:52:51 GMT; path=/; domain=.bugcrowd.com; HttpOnly; SameSite=Lax connect.sid=s%3AzOtKS_kdCJgTVEb2BylRcAIZzjPKsdP9.RCbh8I9%2BV8YZwln7sAZSIn%2B95uywEkczhtgMFgwEvDM; Path=/; HttpOnly
+Referrer-Policy: origin-when-cross-origin
+X-Frame-Options: SAMEORIGIN
+Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
+Content-Type: text/html; charset=utf-8
+Cf-Cache-Status: DYNAMIC
diff --git a/tests/data/recon-results/aquatone-results/headers/https__bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..fbc1dc5
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Server: nginx/1.12.1
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
+Set-Cookie: connect.sid=s%3AKAU8YE4ynxaz5b6XCnY5GoFeoXe0-v-s.AEJNoWe5gH83BowZIdV089fRkA7r3feWQLIqoFlOH1U; Path=/; HttpOnly
+Date: Thu, 30 Jan 2020 12:52:50 GMT
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Access-Control-Allow-Headers: X-Requested-With
+X-Xss-Protection: 1; mode=block
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Vary: Accept-Encoding
+X-Content-Type-Options: nosniff
+Referrer-Policy: origin-when-cross-origin
+X-Frame-Options: SAMEORIGIN
+Retry-Count: 0
+Content-Type: text/html; charset=utf-8
+Content-Length: 11332
diff --git a/tests/data/recon-results/aquatone-results/headers/https__blog_bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__blog_bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..cfc6cb3
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__blog_bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,12 @@
+200 OK
+Vary: Accept-Encoding
+X-Cache: Hit from cloudfront
+Via: 1.1 9ecc03b2c7594e8fcc014b8995d49867.cloudfront.net (CloudFront)
+Last-Modified: Tue, 07 Jan 2020 23:08:55 GMT
+Server: AmazonS3
+X-Amz-Cf-Pop: DFW3-C1
+X-Amz-Cf-Id: SOtOuWuytoUW9p_loGYjd1Yo6TUw7F1Ekj336a09u_rofx58sXt50w==
+Age: 59033
+Content-Type: text/html
+Retry-Count: 0
+Date: Thu, 23 Jan 2020 15:51:21 GMT
diff --git a/tests/data/recon-results/aquatone-results/headers/https__email_assetinventory_bugcrowd_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__email_assetinventory_bugcrowd_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..034070e
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__email_assetinventory_bugcrowd_com__42099b4af021e53f.txt
@@ -0,0 +1,7 @@
+403 Forbidden
+Retry-Count: 0
+Cf-Ray: 55d395dd2d7cec56-DFW
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+Content-Type: text/html
+Content-Length: 553
diff --git a/tests/data/recon-results/aquatone-results/headers/https__email_assetinventory_bugcrowd_com__8443__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__email_assetinventory_bugcrowd_com__8443__42099b4af021e53f.txt
new file mode 100644
index 0000000..ce86bdd
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__email_assetinventory_bugcrowd_com__8443__42099b4af021e53f.txt
@@ -0,0 +1,7 @@
+403 Forbidden
+Cf-Ray: 55d396727981d25a-DFW
+Server: cloudflare
+Date: Thu, 30 Jan 2020 12:53:15 GMT
+Content-Type: text/html
+Content-Length: 553
+Retry-Count: 0
diff --git a/tests/data/recon-results/aquatone-results/headers/https__ibm_bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__ibm_bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..8098f5d
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__ibm_bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Referrer-Policy: origin-when-cross-origin
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Etag: W/"987-PQVVlfC1QE5MlQyXJXFeaOUJCOU"
+Set-Cookie: connect.sid=s%3ArRk1-dbTYunP69jeAiYXIdNQJun9ZBFj.u6G1ow8fgtYJQL3Ah2JuOo3svbf8blo4Gb061uxb7Gs; Path=/; HttpOnly
+Content-Type: text/html; charset=utf-8
+Content-Length: 2439
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+Server: nginx/1.12.1
+X-Frame-Options: SAMEORIGIN
+X-Xss-Protection: 1; mode=block
+Retry-Count: 0
+Vary: Accept-Encoding
+Access-Control-Allow-Headers: X-Requested-With
+X-Content-Type-Options: nosniff
diff --git a/tests/data/recon-results/aquatone-results/headers/https__staging_bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__staging_bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..9c9311a
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__staging_bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Content-Type: text/html; charset=utf-8
+Retry-Count: 0
+Referrer-Policy: origin-when-cross-origin
+X-Frame-Options: SAMEORIGIN
+Server: nginx/1.16.1
+Content-Length: 11332
+Access-Control-Allow-Headers: X-Requested-With
+Vary: Accept-Encoding
+Access-Control-Allow-Origin: *
+X-Xss-Protection: 1; mode=block
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Set-Cookie: connect.sid=s%3Ar8vnLVUd4y48rA8ENClajkDuuuRir-CO.v80SepQPU0kff1FrFfflCF8tdBOBfIstOa05mXqfp4U; Path=/; HttpOnly
+Date: Thu, 30 Jan 2020 12:52:51 GMT
+X-Content-Type-Options: nosniff
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+Etag: W/"2c44-aSq52Bwr/hjAPBUWuI0BtbI4oiE"
diff --git a/tests/data/recon-results/aquatone-results/headers/https__tenable_bitdiscovery_com__42099b4af021e53f.txt b/tests/data/recon-results/aquatone-results/headers/https__tenable_bitdiscovery_com__42099b4af021e53f.txt
new file mode 100644
index 0000000..9b70e88
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/headers/https__tenable_bitdiscovery_com__42099b4af021e53f.txt
@@ -0,0 +1,17 @@
+200 OK
+Content-Length: 2436
+X-Xss-Protection: 1; mode=block
+X-Content-Type-Options: nosniff
+Referrer-Policy: origin-when-cross-origin
+Strict-Transport-Security: max-age=31536000; includeSubDomains
+Set-Cookie: connect.sid=s%3Azmu-FFUEwqffzuS6sU6VSSGhCGwUOrTj.EPhq0v8prw2jwq%2BF34Q02dYqtKETQ6LgbuBV8Ofp2Zc; Path=/; HttpOnly
+Access-Control-Allow-Origin: https://bitdiscovery.com
+Access-Control-Allow-Headers: X-Requested-With
+Content-Type: text/html; charset=utf-8
+Server: nginx/1.12.1
+Date: Thu, 30 Jan 2020 12:52:52 GMT
+Content-Security-Policy: default-src 'self' https: 'unsafe-inline' 'unsafe-eval' data: client-api.arkoselabs.com
+X-Frame-Options: SAMEORIGIN
+Etag: W/"984-uCOzKHNJY6hX57hkNMYtX3asDvw"
+Retry-Count: 0
+Vary: Accept-Encoding
diff --git a/tests/data/recon-results/aquatone-results/html/http__104_20_60_51__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__104_20_60_51__42099b4af021e53f.html
new file mode 100644
index 0000000..efb96a9
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__104_20_60_51__42099b4af021e53f.html
@@ -0,0 +1 @@
+error code: 1003
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/html/http__104_20_60_51__8080__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__104_20_60_51__8080__42099b4af021e53f.html
new file mode 100644
index 0000000..efb96a9
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__104_20_60_51__8080__42099b4af021e53f.html
@@ -0,0 +1 @@
+error code: 1003
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/html/http__104_20_61_51__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__104_20_61_51__42099b4af021e53f.html
new file mode 100644
index 0000000..efb96a9
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__104_20_61_51__42099b4af021e53f.html
@@ -0,0 +1 @@
+error code: 1003
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/html/http__104_20_61_51__8080__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__104_20_61_51__8080__42099b4af021e53f.html
new file mode 100644
index 0000000..efb96a9
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__104_20_61_51__8080__42099b4af021e53f.html
@@ -0,0 +1 @@
+error code: 1003
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/html/http__13_225_54_100__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__13_225_54_100__42099b4af021e53f.html
new file mode 100644
index 0000000..234afd8
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__13_225_54_100__42099b4af021e53f.html
@@ -0,0 +1,20 @@
+
+
+ERROR: The request could not be satisfied
+
+403 ERROR
+The request could not be satisfied.
+
+Bad request.
+We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
+
+If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
+
+
+
+Generated by cloudfront (CloudFront)
+Request ID: CJywtobNprytTsObsL5aYgvX63VJBp2huOouDKa67X5WeD8M7P86Fg==
+
+
+
+
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/html/http__13_225_54_22__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__13_225_54_22__42099b4af021e53f.html
new file mode 100644
index 0000000..5d6ca11
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__13_225_54_22__42099b4af021e53f.html
@@ -0,0 +1,20 @@
+
+
+ERROR: The request could not be satisfied
+
+403 ERROR
+The request could not be satisfied.
+
+Bad request.
+We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
+
+If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
+
+
+
+Generated by cloudfront (CloudFront)
+Request ID: -xOcu_8pI1-7e-Csdxnud7wF8PONg2oAUSK91syAHyiZchM1Tmplag==
+
+
+
+
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/html/http__13_225_54_41__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__13_225_54_41__42099b4af021e53f.html
new file mode 100644
index 0000000..a773753
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__13_225_54_41__42099b4af021e53f.html
@@ -0,0 +1,20 @@
+
+
+ERROR: The request could not be satisfied
+
+403 ERROR
+The request could not be satisfied.
+
+Bad request.
+We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
+
+If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
+
+
+
+Generated by cloudfront (CloudFront)
+Request ID: 9UkQcHRfCNcH1pfvhSE7FDGCukT9YYhOuncVa89dNUfwqseLnS05jg==
+
+
+
+
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/html/http__13_225_54_58__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__13_225_54_58__42099b4af021e53f.html
new file mode 100644
index 0000000..0d45f9a
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__13_225_54_58__42099b4af021e53f.html
@@ -0,0 +1,20 @@
+
+
+ERROR: The request could not be satisfied
+
+403 ERROR
+The request could not be satisfied.
+
+Bad request.
+We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
+
+If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
+
+
+
+Generated by cloudfront (CloudFront)
+Request ID: nPLTLIpJUp_NKRKRKvHuaxC3OvSVusVNDKF97iRIxACgeWJuu3f4_w==
+
+
+
+
\ No newline at end of file
diff --git a/tests/data/recon-results/aquatone-results/html/http__13_57_162_100__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__13_57_162_100__42099b4af021e53f.html
new file mode 100644
index 0000000..eef7c56
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__13_57_162_100__42099b4af021e53f.html
@@ -0,0 +1,259 @@
+
+
+
+
+ Bit Discovery - Asset Inventory
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Inventory Made Easy
+
+ An inventory of your company's internet-accessible tech. Instantly created.
+ Automatically updated.
+
+
+ Contact us
+
+
+
+
+
How it works
+
+
+
+
+
+
Instant Inventory Creation
+
+ Provide one domain name, and Bit Discovery does the rest, instantly
+ creating a complete Inventory.
+
+
+
+
+
+
+
+
+
Deep Discovery
+
+ Bit Discovery keeps running and goes deeper, continually updating
+ your Inventory with discovered ports, services, and technology.
+
+
+
+
+
+
+
+
+
Get Notified
+
+ Prompt notification keeps you informed when your Inventory is
+ updated with newly discovered tech.
+
+
+
+
+
+
+
+
+
Features
+
+
+
+
Advanced Discovery
+
+
+ Bit Discovery automatically discovers your internet-accessible tech, and
+ then inventories it for you. It discovers domain names, subdomains,
+ ports, and does extensive technology fingerprinting.
+
+
+
+
+
+
Powerful Filtering
+
+
+ Bit Discovery delivers detailed information for all of your assets.
+ Filtering makes the information you're looking for easy to find.
+
+
+
+
+
+
+
Email Alerts
+
+
+ Notification in the Bit Discovery application is great, but notification
+ in email is even better. Every little bit of data, new found assets, and
+ updates to known assets are available to you anytime, anywhere.
+
+
+
+
+
+
Auth0 Single Sign On
+
+
+ To access Bit Discovery, use the credentials of your most trusted
+ existing account. No additional account setup necessary!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Inventory Made Easy
+
+ An inventory of your company's internet-accessible tech. Instantly created.
+ Automatically updated.
+
+
+ Contact us
+
+
+
+
+
How it works
+
+
+
+
+
+
Instant Inventory Creation
+
+ Provide one domain name, and Bit Discovery does the rest, instantly
+ creating a complete Inventory.
+
+
+
+
+
+
+
+
+
Deep Discovery
+
+ Bit Discovery keeps running and goes deeper, continually updating
+ your Inventory with discovered ports, services, and technology.
+
+
+
+
+
+
+
+
+
Get Notified
+
+ Prompt notification keeps you informed when your Inventory is
+ updated with newly discovered tech.
+
+
+
+
+
+
+
+
+
Features
+
+
+
+
Advanced Discovery
+
+
+ Bit Discovery automatically discovers your internet-accessible tech, and
+ then inventories it for you. It discovers domain names, subdomains,
+ ports, and does extensive technology fingerprinting.
+
+
+
+
+
+
Powerful Filtering
+
+
+ Bit Discovery delivers detailed information for all of your assets.
+ Filtering makes the information you're looking for easy to find.
+
+
+
+
+
+
+
Email Alerts
+
+
+ Notification in the Bit Discovery application is great, but notification
+ in email is even better. Every little bit of data, new found assets, and
+ updates to known assets are available to you anytime, anywhere.
+
+
+
+
+
+
Auth0 Single Sign On
+
+
+ To access Bit Discovery, use the credentials of your most trusted
+ existing account. No additional account setup necessary!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/data/recon-results/aquatone-results/html/http__52_53_92_161__42099b4af021e53f.html b/tests/data/recon-results/aquatone-results/html/http__52_53_92_161__42099b4af021e53f.html
new file mode 100644
index 0000000..eef7c56
--- /dev/null
+++ b/tests/data/recon-results/aquatone-results/html/http__52_53_92_161__42099b4af021e53f.html
@@ -0,0 +1,259 @@
+
+
+
+