mirror of https://github.com/avast/PurpleDome
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
# PYTHON_ARGCOMPLETE_OK
|
|
""" The main tool to run experiments """
|
|
|
|
import argparse
|
|
import argcomplete
|
|
|
|
from app.experimentcontrol import Experiment
|
|
|
|
|
|
# TODO: Name experiments. Name will be written to the log
|
|
|
|
def explain(args): # pylint: disable=unused-argument
|
|
""" Explain the tool"""
|
|
|
|
print("Please specify a command to execute. For a list see <help>")
|
|
|
|
|
|
def run(args):
|
|
""" Run experiments
|
|
|
|
@param args: arguments from the argparse parser
|
|
"""
|
|
|
|
if args.caldera_attack_file:
|
|
with open(args.caldera_attack_file, "rt", encoding="utf8") as fh:
|
|
for line in fh:
|
|
line = line.strip()
|
|
print(f"Running calder attack {line}")
|
|
exp = Experiment(args.configfile, args.verbose)
|
|
exp.run([line])
|
|
|
|
else:
|
|
caldera_attack = None
|
|
if args.caldera_attack:
|
|
caldera_attack = [args.caldera_attack]
|
|
exp = Experiment(args.configfile, args.verbose)
|
|
exp.run(caldera_attack)
|
|
|
|
|
|
def create_parser():
|
|
""" Creates the parser for the command line arguments"""
|
|
lparser = argparse.ArgumentParser("Controls an experiment on the configured systems")
|
|
subparsers = lparser.add_subparsers(help="sub-commands")
|
|
|
|
lparser.set_defaults(func=explain)
|
|
lparser.add_argument('--verbose', '-v', action='count', default=0, help="Verbosity level")
|
|
|
|
# Sub parser for machine creation
|
|
parser_run = subparsers.add_parser("run", help="run experiments")
|
|
parser_run.set_defaults(func=run)
|
|
parser_run.add_argument("--configfile", default="experiment.yaml", help="Config file to create the experiment from")
|
|
parser_run.add_argument("--caldera_attack", default=None, help="The id of a specific caldera attack to run, will override experiment configuration for attacks")
|
|
parser_run.add_argument("--caldera_attack_file", default=None, help="The file name containing a list of caldera attacks to run, will override experiment configuration for attacks")
|
|
|
|
return lparser
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = create_parser()
|
|
argcomplete.autocomplete(parser)
|
|
arguments = parser.parse_args()
|
|
arguments.func(arguments)
|