def parse_args():
    parser = ArgumentParser(prog=ArgumentParser().prog, prefix_chars='-/', add_help=False, description="Simulate ransomware infection through Bloodhound's database")
    parser.add_argument('-h', '--help', '/?', '/h', '/help', action='help', help='show this help message and exit')
    parser.add_argument('-s', '--simulate', metavar='', dest='simulate', choices=[PRACTICAL, LOGICAL, NETONLY], default=LOGICAL, help='type of lateral movement to simulate. choices: [%(choices)s], (default: logical).')
    parser.add_argument('-c', '--computers', metavar='', dest='computers', choices=[ALL, PRIVS], default=ALL, help='which computer edges should be considered as the starting point. choices: [%(choices)s], (default: all)')
    parser.add_argument('-u', '--user', dest='user', metavar='', help='Neo4j DB user name', type=str, default='neo4j')
    parser.add_argument('-p', '--pass', dest='password', metavar='', help='Neo4j DB password', type=str, default='neo4j')
    parser.add_argument('-l', '--url', dest='url', metavar='', help='Neo4j URL', default='bolt://localhost:7687', type=str)
    parser.add_argument('-m', '--maxwaves', dest='maxwaves', type=int, default=3, help='maximal number of simulated attack waves')
    parser.add_argument('-o', '--output', dest='out_file', metavar='', help='output file name', type=str, default=None)
    parser.add_argument('-e', '--edges', dest='edges', type=str, default='MemberOf', help='Logical edges between hosts')
    parser.add_argument('-w', '--workers', dest='workers', type=int, default=25, help='Number of paraller queries to the database')
    subprasers = parser.add_subparsers(dest='command')
    q_parser = subprasers.add_parser('query', help='generate Cypher query')
    q_parser.add_argument('computer', type=str, help='starting from computer name')
    args = parser.parse_args()
    return args
def parse_args():
    parser = ArgumentParser(prog=ArgumentParser().prog, prefix_chars='-/', add_help=False, description="Simulate ransomware infection through Bloodhound's database")
    parser.add_argument('-h', '--help', '/?', '/h', '/help', action='help', help='show this help message and exit')
    parser.add_argument('-s', '--simulate', metavar=, dest='simulate', choices=[PRACTICAL, LOGICAL, NETONLY], default=LOGICAL, help='type of lateral movement to simulate. choices: [%(choices)s], (default: logical).')
    parser.add_argument('-c', '--computers', metavar=, dest='computers', choices=[ALL, PRIVS], default=ALL, help='which computer edges should be considered as the starting point. choices: [%(choices)s], (default: all)')
    parser.add_argument('-u', '--user', dest='user', metavar=, help='Neo4j DB user name', type=str, default='neo4j')
    parser.add_argument('-p', '--pass', dest='password', metavar=, help='Neo4j DB password', type=str, default='neo4j')
    parser.add_argument('-l', '--url', dest='url', metavar=, help='Neo4j URL', default='bolt://localhost:7687', type=str)
    parser.add_argument('-m', '--maxwaves', dest='maxwaves', type=int, default=3, help='maximal number of simulated attack waves')
    parser.add_argument('-o', '--output', dest='out_file', metavar=, help='output file name', type=str, default=None)
    parser.add_argument('-e', '--edges', dest='edges', type=str, default='MemberOf', help='Logical edges between hosts')
    parser.add_argument('-w', '--workers', dest='workers', type=int, default=25, help='Number of paraller queries to the database')
    subprasers = parser.add_subparsers(dest='command')
    q_parser = subprasers.add_parser('query', help='generate Cypher query')
    q_parser.add_argument('computer', type=str, help='starting from computer name')
    args = parser.parse_args()
    return args