Очередь + Потоки + MySQL + Python - Остановки - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь заставить мой код работать с потоками, но он застревает, иногда в sqlite (запрос кажется не окончательным sh), а иногда в очереди (также останавливается и не продолжает выполнять код). Не знаю, как справиться с этой проблемой (она работает только в том случае, если она не является многопоточной, то есть по одному, что немного раздражает при грубой силе).

Заранее благодарен за любую помощь.

Весь код можно найти здесь: https://pastebin.com/aRNREBjp

Когда я запускаю этот словарь с 1500, он работает: https://pastebin.com/G54LyF2u

Но на этом с 5000 застрять: https://pastebin.com/1gGYCRV4

def runBrute(self, domain, wordlist, resolver, outfile, n_threads):
        self.print_notif("Beginning brute force...")

        # Parse Word List
        file = open(wordlist)
        content = file.read()
        wordlists = content.splitlines()

        # for sub in wordlists:
        for sub in wordlists:
            self.q.put(sub)

        for t in range(int(n_threads)):
            # start all threads
            worker = Thread(target=self.resolve, args=(domain, resolver, outfile))
            # daemon thread means a thread that will end when the main thread ends
            worker.daemon = True
            worker.start()

        self.q.join()

def resolve(self, root, name_server, outfile):
        while True:
            # get the subdomain from the queue
            sub = self.q.get()

            # scan the subdomain
            resolver = dns.resolver.Resolver()
            resolver.nameservers = [name_server, ]
            domain = sub + "." + root

            # probably should check other records (A, AAAA, MX, NS), but this will do for now.
            try:
                answers = resolver.query(domain, RECORD_TYPE_A).rrset[0]
                self.print_yay(f"{domain} => {answers}")
                reversed_dns = []

                try:
                    reversed_dns = socket.gethostbyaddr(str(answers))
                except:
                    reversed_dns.append('')

                val = (domain, str(answers), reversed_dns[0])

                try:
                    self.cursor.execute("INSERT INTO servers (domain, address, reverse_dns) VALUES (%s, %s, %s)", val)
                except:
                    pass

            except:
                pass

            # we're done with scanning that subdomain
            self.q.task_done()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...