threat9 / routersploit

Exploitation Framework for Embedded Devices
Other
12.11k stars 2.31k forks source link

tests fail on python 3.9 #711

Closed eli-schwartz closed 3 years ago

eli-schwartz commented 3 years ago

Steps to Reproduce (for bugs)

  1. clone repo
  2. run make test

Your Environment

Current Behavior

$ python3 -m pytest -n16 tests/exploits/ tests/creds/ tests/encoders/ tests/generic/ tests/payloads/
============================= test session starts ==============================
platform linux -- Python 3.9.0, pytest-6.1.2, py-1.9.0, pluggy-0.13.1
rootdir: /build/routersploit/src/routersploit-3.4.0
plugins: forked-1.3.0, xdist-2.1.0, Faker-4.14.2
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I
gw0 [314] / gw1 [314] / gw2 [314] / gw3 [314] / gw4 [314] / gw5 [314] / gw6 [314] / gw7 [314] / gw8 [314] / gw9 [314] / gw10 [314] / gw11 [314] / gw12 [314] / gw13 [314] / gw14 [314] / gw15 [314]

..............FF........................................................ [ 20%]
........F..................F...F.F..FF.....................FFFFFFFFFFF.. [ 45%]
.........FFFF.F.F...F.F...FF.............F.FFFFFFFF..FF....F..F..F.FFF.. [ 68%]
F....FF....F.....FFF..F....FF........................................F.. [ 91%]
.......F..F............F..                                               [100%]
=================================== FAILURES ===================================
______________________________ test_check_success ______________________________
[gw14] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=43663)

    def test_check_success(target):
        """ Test scenario - successful check """

        route_mock = target.get_route_mock("/../../../../../../../../../../../../etc/shadow", methods=["GET"])
        route_mock.return_value = (
            "root:x:0:0:root:/root:/bin/bash"
            "daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin"
            "bin:x:2:2:bin:/bin:/usr/sbin/nologin"
            "sys:x:3:3:sys:/dev:/usr/sbin/nologin"
            "sync:x:4:65534:sync:/bin:/bin/sync"
            "games:x:5:60:games:/usr/games:/usr/sbin/nologin"
            "man:x:6:12:man:/var/cache/man:/usr/sbin/nologin"
            "lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin"
            "mail:x:8:8:mail:/var/mail:/usr/sbin/nologin"
            "news:x:9:9:news:/var/spool/news:/usr/sbin/nologin"
            "uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin"
            "proxy:x:13:13:proxy:/bin:/usr/sbin/nologin"
            "www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin"
            "backup:x:34:34:backup:/var/backups:/usr/sbin/nologin"
        )

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.filename == "/etc/shadow"

        exploit.target = target.host
        exploit.port = target.port

>       assert exploit.check()
E       assert False
E        +  where False = <bound method Exploit.check of <routersploit.modules.exploits.misc.miele.pg8528_path_traversal.Exploit object at 0x7f75dd5a7eb0>>()
E        +    where <bound method Exploit.check of <routersploit.modules.exploits.misc.miele.pg8528_path_traversal.Exploit object at 0x7f75dd5a7eb0>> = <routersploit.modules.exploits.misc.miele.pg8528_path_traversal.Exploit object at 0x7f75dd5a7eb0>.check

tests/exploits/misc/miele/test_pg8528_path_traversal.py:34: AssertionError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:01] "GET /etc/shadow HTTP/1.1" 404 -
______________________________ test_check_success ______________________________
[gw13] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=44359)

    def test_check_success(target):
        """ Test scenario - successful check """

        route_mock = target.get_route_mock("/../../../../../etc/passwd", methods=["GET"])
        route_mock.return_value = (
            "root:absxcfbgXtb3o:0:0:root:/:/bin/sh"
        )

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.filename == "/etc/passwd"

        exploit.target = target.host
        exploit.port = target.port

>       assert exploit.check()
E       assert False
E        +  where False = <bound method Exploit.check of <routersploit.modules.exploits.cameras.xiongmai.uc_httpd_path_traversal.Exploit object at 0x7f71f547cca0>>()
E        +    where <bound method Exploit.check of <routersploit.modules.exploits.cameras.xiongmai.uc_httpd_path_traversal.Exploit object at 0x7f71f547cca0>> = <routersploit.modules.exploits.cameras.xiongmai.uc_httpd_path_traversal.Exploit object at 0x7f71f547cca0>.check

tests/exploits/cameras/xiongmai/test_uc_httpd_path_traversal.py:21: AssertionError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:01] "GET /etc/passwd HTTP/1.1" 404 -
______________________________ test_check_success ______________________________
[gw11] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=38203)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "Administrator:"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/avigilon/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.avigilon.telnet_default_creds.Exploit object at 0x7f543132af10>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.avigilon.telnet_default_creds.Exploit object at 0x7f543132af10>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f543132af70>,)
kwargs = {}, threads = [<Thread(thread-0, started 139999588263488)>]
threads_running = <threading.Event object at 0x7f543132ae50>, thread_id = 0
thread = <Thread(thread-0, started 139999588263488)>, start = 1605252183.8356538

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw4] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=37167)

    def test_check_success(target):
        """ Test scenario - successful check """

        route_mock = target.get_route_mock("/help/../../../../../../../../../../../../../../../../etc/shadow", methods=["GET"])
        route_mock.return_value = (
            "#root:$1$BOYmzSKq$ePjEPSpkQGeBcZjlEeLqI.:13796:0:99999:7:::"
            "root:$1$BOYmzSKq$ePjEPSpkQGeBcZjlEeLqI.:13796:0:99999:7:::"
            "Admin:$1$BOYmzSKq$ePjEPSpkQGeBcZjlEeLqI.:13796:0:99999:7:::"
            "#tw:$1$zxEm2v6Q$qEbPfojsrrE/YkzqRm7qV/:13796:0:99999:7:::"
        )

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.filename == "/etc/shadow"

        exploit.target = target.host
        exploit.port = target.port

>       assert exploit.check()
E       assert False
E        +  where False = <bound method Exploit.check of <routersploit.modules.exploits.routers.tplink.wdr740nd_wdr740n_path_traversal.Exploit object at 0x7f2d642dcfd0>>()
E        +    where <bound method Exploit.check of <routersploit.modules.exploits.routers.tplink.wdr740nd_wdr740n_path_traversal.Exploit object at 0x7f2d642dcfd0>> = <routersploit.modules.exploits.routers.tplink.wdr740nd_wdr740n_path_traversal.Exploit object at 0x7f2d642dcfd0>.check

tests/exploits/routers/tplink/test_wdr740nd_wdr740n_path_traversal.py:24: AssertionError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:05] "GET /etc/shadow HTTP/1.1" 404 -
______________________________ test_check_success ______________________________
[gw1] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=41013)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/geovision/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.geovision.telnet_default_creds.Exploit object at 0x7f1c881e2f70>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.geovision.telnet_default_creds.Exploit object at 0x7f1c881e2f70>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f1c881e24c0>,)
kwargs = {}, threads = [<Thread(thread-0, started 139760433616448)>]
threads_running = <threading.Event object at 0x7f1c881e2460>, thread_id = 0
thread = <Thread(thread-0, started 139760433616448)>, start = 1605252186.4469695

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw4] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=46189)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/dlink/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.dlink.telnet_default_creds.Exploit object at 0x7f2d642c0430>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.dlink.telnet_default_creds.Exploit object at 0x7f2d642c0430>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f2d642b8eb0>,)
kwargs = {}, threads = [<Thread(thread-0, started 139832860866112)>]
threads_running = <threading.Event object at 0x7f2d666c3d00>, thread_id = 0
thread = <Thread(thread-0, started 139832860866112)>, start = 1605252186.9179504

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw12] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=44247)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:12345", "admin:123456", "Admin:12345", "Admin:123456"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/acti/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.acti.telnet_default_creds.Exploit object at 0x7f8215c71b50>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.acti.telnet_default_creds.Exploit object at 0x7f8215c71b50>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f8215c5d160>,)
kwargs = {}, threads = [<Thread(thread-0, started 140196696782400)>]
threads_running = <threading.Event object at 0x7f8215c7f250>, thread_id = 0
thread = <Thread(thread-0, started 140196696782400)>, start = 1605252189.8543615

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw12] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=36811)

    def test_check_success(target):
        """ Test scenario - testing against HTTP server """

        route_mock = target.get_route_mock("/video.htm", methods=["GET", "POST"])
        route_mock.side_effect = apply_response

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:12345", "admin:123456", "Admin:12345", "Admin:123456"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = target.host
        exploit.port = target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/acti/test_webinterface_default_creds.py:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/cameras/acti/webinterface_http_form_default_creds.py:91: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.acti.webinterface_http_form_default_creds.Exploit object at 0x7f8216dac580>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.acti.webinterface_http_form_default_creds.Exploit object at 0x7f8216dac580>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f8216d88820>,)
kwargs = {}, threads = [<Thread(thread-0, started 140196678579776)>]
threads_running = <threading.Event object at 0x7f8216d88610>, thread_id = 0
thread = <Thread(thread-0, started 140196678579776)>, start = 1605252190.0399477

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:10] "GET /video.htm HTTP/1.1" 200 -
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:10] "GET /video.htm HTTP/1.1" 200 -
______________________________ test_check_success ______________________________
[gw13] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=44167)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["root:pass", "admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/axis/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.axis.telnet_default_creds.Exploit object at 0x7f71f42b8340>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.axis.telnet_default_creds.Exploit object at 0x7f71f42b8340>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f71f42b83a0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140127414208064)>]
threads_running = <threading.Event object at 0x7f71f42c1040>, thread_id = 0
thread = <Thread(thread-0, started 140127414208064)>, start = 1605252208.3786626

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw13] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=38273)

    def test_check_success(target):
        """ Test scenario - testing against HTTP server """

        cgi_mock = target.get_route_mock("/", methods=["GET", "POST"])
        cgi_mock.side_effect = apply_response

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.threads == 1
        assert exploit.defaults == ["root:pass", "root:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = target.host
        exploit.port = target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/axis/test_webinterface_http_auth_default_creds.py:36: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/http_basic_digest_default.py:115: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.axis.webinterface_http_auth_default_creds.Exploit object at 0x7f71f42c1940>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.axis.webinterface_http_auth_default_creds.Exploit object at 0x7f71f42c1940>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f71f42c15b0>,)
kwargs = {}, threads = [<Thread(thread-0, stopped 140127334561344)>]
threads_running = <threading.Event object at 0x7f71f42c1dc0>, thread_id = 0
thread = <Thread(thread-0, stopped 140127334561344)>, start = 1605252208.4505749

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:28] "GET / HTTP/1.1" 401 -
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:28] "GET / HTTP/1.1" 401 -
______________________________ test_check_success ______________________________
[gw2] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=39871)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:", ":"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/arecont/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.arecont.telnet_default_creds.Exploit object at 0x7fd2a6624d90>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.arecont.telnet_default_creds.Exploit object at 0x7fd2a6624d90>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fd2a6624550>,)
kwargs = {}, threads = [<Thread(thread-0, started 140542720181824)>]
threads_running = <threading.Event object at 0x7fd2a6624af0>, thread_id = 0
thread = <Thread(thread-0, started 140542720181824)>, start = 1605252208.3816233

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw11] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=36741)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/avtech/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.avtech.telnet_default_creds.Exploit object at 0x7f5431330040>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.avtech.telnet_default_creds.Exploit object at 0x7f5431330040>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f5431330e20>,)
kwargs = {}, threads = [<Thread(thread-0, started 139999588263488)>]
threads_running = <threading.Event object at 0x7f5431335850>, thread_id = 0
thread = <Thread(thread-0, started 139999588263488)>, start = 1605252208.55695

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw8] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=38719)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/basler/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.basler.telnet_default_creds.Exploit object at 0x7f0b116c8e50>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.basler.telnet_default_creds.Exploit object at 0x7f0b116c8e50>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f0b116c88e0>,)
kwargs = {}, threads = [<Thread(thread-0, started 139685401445952)>]
threads_running = <threading.Event object at 0x7f0b117394f0>, thread_id = 0
thread = <Thread(thread-0, started 139685401445952)>, start = 1605252208.4059885

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw3] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=38841)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/brickcom/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.brickcom.telnet_default_creds.Exploit object at 0x7ff5f56eda60>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.brickcom.telnet_default_creds.Exploit object at 0x7ff5f56eda60>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7ff5f56edcd0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140694379198016)>]
threads_running = <threading.Event object at 0x7ff5f56edfd0>, thread_id = 0
thread = <Thread(thread-0, started 140694379198016)>, start = 1605252208.4025636

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw9] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=38681)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["root:camera"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/canon/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.canon.telnet_default_creds.Exploit object at 0x7fc2386258e0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.canon.telnet_default_creds.Exploit object at 0x7fc2386258e0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fc238625820>,)
kwargs = {}, threads = [<Thread(thread-0, started 140472164132416)>]
threads_running = <threading.Event object at 0x7fc238625730>, thread_id = 0
thread = <Thread(thread-0, started 140472164132416)>, start = 1605252208.429841

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw8] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=46601)

    def test_check_success(target):
        """ Test scenario - testing against HTTP server """

        route_mock = target.get_route_mock("/cgi-bin/auth_if.cgi", methods=["GET", "POST"])
        route_mock.return_value = "success: true"

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = target.host
        exploit.port = target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/basler/test_webinterface_default_creds.py:22: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/cameras/basler/webinterface_http_form_default_creds.py:91: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.basler.webinterface_http_form_default_creds.Exploit object at 0x7f0b0be4bdf0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.basler.webinterface_http_form_default_creds.Exploit object at 0x7f0b0be4bdf0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f0b0be4b340>,)
kwargs = {}, threads = [<Thread(thread-0, stopped 139685409838656)>]
threads_running = <threading.Event object at 0x7f0b0be4b880>, thread_id = 0
thread = <Thread(thread-0, stopped 139685409838656)>, start = 1605252208.6110444

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:28] "POST /cgi-bin/auth_if.cgi?Login HTTP/1.1" 200 -
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:28] "POST /cgi-bin/auth_if.cgi?Login HTTP/1.1" 200 -
______________________________ test_check_success ______________________________
[gw3] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=45839)

    def test_check_success(target):
        """ Test scenario - testing against HTTP server """

        cgi_mock = target.get_route_mock("/", methods=["GET", "POST"])
        cgi_mock.side_effect = apply_response

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = target.host
        exploit.port = target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/brickcom/test_webinterface_http_auth_default_creds.py:36: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/http_basic_digest_default.py:115: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.brickcom.webinterface_http_auth_default_creds.Exploit object at 0x7ff5f56e9df0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.brickcom.webinterface_http_auth_default_creds.Exploit object at 0x7ff5f56e9df0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7ff5f56e9a30>,)
kwargs = {}, threads = [<Thread(thread-0, stopped 140694370281024)>]
threads_running = <threading.Event object at 0x7ff5f56e9640>, thread_id = 0
thread = <Thread(thread-0, stopped 140694370281024)>, start = 1605252208.6117353

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:28] "GET / HTTP/1.1" 401 -
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:28] "GET / HTTP/1.1" 401 -
______________________________ test_check_success ______________________________
[gw9] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=39623)

    def test_check_success(target):
        """ Test scenario - testing against HTTP server """

        cgi_mock = target.get_route_mock("/admin/index.html", methods=["GET", "POST"])
        cgi_mock.side_effect = apply_response

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = target.host
        exploit.port = target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/canon/test_webinterface_default_creds.py:36: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/http_basic_digest_default.py:115: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.canon.webinterface_http_auth_default_creds.Exploit object at 0x7fc238e93280>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.canon.webinterface_http_auth_default_creds.Exploit object at 0x7fc238e93280>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fc238625fa0>,)
kwargs = {}, threads = [<Thread(thread-0, stopped 140472154846784)>]
threads_running = <threading.Event object at 0x7fc2385f1400>, thread_id = 0
thread = <Thread(thread-0, stopped 140472154846784)>, start = 1605252208.6329777

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:28] "GET /admin/index.html HTTP/1.1" 401 -
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:28] "GET /admin/index.html HTTP/1.1" 401 -
______________________________ test_check_success ______________________________
[gw0] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=36859)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/cisco/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.cisco.telnet_default_creds.Exploit object at 0x7fe220671fa0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.cisco.telnet_default_creds.Exploit object at 0x7fe220671fa0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fe2206712e0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140609109096000)>]
threads_running = <threading.Event object at 0x7fe220671790>, thread_id = 0
thread = <Thread(thread-0, started 140609109096000)>, start = 1605252208.6609082

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw5] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=45083)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:1234"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/honeywell/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.honeywell.telnet_default_creds.Exploit object at 0x7f5f2d6c94c0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.honeywell.telnet_default_creds.Exploit object at 0x7f5f2d6c94c0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f5f2d6c9e80>,)
kwargs = {}, threads = [<Thread(thread-0, started 140046769534528)>]
threads_running = <threading.Event object at 0x7f5f2d6c4eb0>, thread_id = 0
thread = <Thread(thread-0, started 140046769534528)>, start = 1605252211.0315614

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw5] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=43197)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/vacron/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.vacron.telnet_default_creds.Exploit object at 0x7f5f342a51f0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.vacron.telnet_default_creds.Exploit object at 0x7f5f342a51f0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f5f342a59a0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140046760617536)>]
threads_running = <threading.Event object at 0x7f5f342a5f70>, thread_id = 0
thread = <Thread(thread-0, started 140046760617536)>, start = 1605252211.202251

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw1] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=44263)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/grandstream/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.grandstream.telnet_default_creds.Exploit object at 0x7f1c89d0e130>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.grandstream.telnet_default_creds.Exploit object at 0x7f1c89d0e130>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f1c89d0e610>,)
kwargs = {}, threads = [<Thread(thread-0, started 139760433616448)>]
threads_running = <threading.Event object at 0x7f1c89d0ed30>, thread_id = 0
thread = <Thread(thread-0, started 139760433616448)>, start = 1605252211.188655

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw15] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=41067)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:12345"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/hikvision/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.hikvision.telnet_default_creds.Exploit object at 0x7ff5924bd040>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.hikvision.telnet_default_creds.Exploit object at 0x7ff5924bd040>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7ff5924bd100>,)
kwargs = {}, threads = [<Thread(thread-0, started 140692707001920)>]
threads_running = <threading.Event object at 0x7ff5924cba00>, thread_id = 0
thread = <Thread(thread-0, started 140692707001920)>, start = 1605252211.1460414

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw6] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=36143)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["root:system"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/iqinvision/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.iqinvision.telnet_default_creds.Exploit object at 0x7f66e8175220>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.iqinvision.telnet_default_creds.Exploit object at 0x7f66e8175220>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f66e8175910>,)
kwargs = {}, threads = [<Thread(thread-0, started 140079877576256)>]
threads_running = <threading.Event object at 0x7f66e81751f0>, thread_id = 0
thread = <Thread(thread-0, started 140079877576256)>, start = 1605252211.1930234

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw15] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=46855)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["supervisor:supervisor"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/videoiq/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.videoiq.telnet_default_creds.Exploit object at 0x7ff59245e760>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.videoiq.telnet_default_creds.Exploit object at 0x7ff59245e760>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7ff5935b9670>,)
kwargs = {}, threads = [<Thread(thread-0, started 140692697716288)>]
threads_running = <threading.Event object at 0x7ff5935b9850>, thread_id = 0
thread = <Thread(thread-0, started 140692697716288)>, start = 1605252211.8343832

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw12] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=37427)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:9999"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/american_dynamics/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.american_dynamics.telnet_default_creds.Exploit object at 0x7f8215c02ee0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.american_dynamics.telnet_default_creds.Exploit object at 0x7f8215c02ee0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f8216d9ce80>,)
kwargs = {}, threads = [<Thread(thread-0, started 140196705175104)>]
threads_running = <threading.Event object at 0x7f8215c890d0>, thread_id = 0
thread = <Thread(thread-0, started 140196705175104)>, start = 1605252214.627975

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw14] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=40451)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "support:support", "user:user"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/asmax/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.asmax.telnet_default_creds.Exploit object at 0x7f75dc5c8880>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.asmax.telnet_default_creds.Exploit object at 0x7f75dc5c8880>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f75dc5c8910>,)
kwargs = {}, threads = [<Thread(thread-0, started 140143012857408)>]
threads_running = <threading.Event object at 0x7f75dc538580>, thread_id = 0
thread = <Thread(thread-0, started 140143012857408)>, start = 1605252217.3877356

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw14] linux -- Python 3.9.0 /usr/bin/python3

target = HttpServiceMock(host='127.0.0.1', port=39183)

    def test_check_success(target):
        """ Test scenario - successful check """

        cgi_mock = target.get_route_mock("/", methods=["GET", "POST"])
        cgi_mock.side_effect = apply_response

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 80
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "support:support", "user:user"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = target.host
        exploit.port = target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/asmax/test_webinterface_http_auth_default_creds.py:37: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/http_basic_digest_default.py:115: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.asmax.webinterface_http_auth_default_creds.Exploit object at 0x7f75dc53c610>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.asmax.webinterface_http_auth_default_creds.Exploit object at 0x7f75dc53c610>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f75dc5f69a0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140143004464704)>]
threads_running = <threading.Event object at 0x7f75dc4259a0>, thread_id = 0
thread = <Thread(thread-0, started 140143004464704)>, start = 1605252222.4242027

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
------------------------------ Captured log call -------------------------------
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:41] "GET / HTTP/1.1" 401 -
INFO     werkzeug:_internal.py:113 127.0.0.1 - - [13/Nov/2020 07:23:42] "GET / HTTP/1.1" 401 -
______________________________ test_check_success ______________________________
[gw7] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=35867)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:jvc"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/jvc/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.jvc.telnet_default_creds.Exploit object at 0x7f54f2e3e430>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.jvc.telnet_default_creds.Exploit object at 0x7f54f2e3e430>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f54f2e3e8b0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140002838033984)>]
threads_running = <threading.Event object at 0x7f54f2e6af70>, thread_id = 0
thread = <Thread(thread-0, started 140002838033984)>, start = 1605252223.1064003

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw11] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=46201)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:1111111", "admin:4321", "root:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/samsung/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.samsung.telnet_default_creds.Exploit object at 0x7f543132a970>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.samsung.telnet_default_creds.Exploit object at 0x7f543132a970>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f543132adf0>,)
kwargs = {}, threads = [<Thread(thread-0, started 139999588263488)>]
threads_running = <threading.Event object at 0x7f543132ad30>, thread_id = 0
thread = <Thread(thread-0, started 139999588263488)>, start = 1605252233.1510823

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw13] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=37275)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:meinsm"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/mobotix/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.mobotix.telnet_default_creds.Exploit object at 0x7f71f4336130>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.mobotix.telnet_default_creds.Exploit object at 0x7f71f4336130>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f71f4336f10>,)
kwargs = {}, threads = [<Thread(thread-0, started 140127414208064)>]
threads_running = <threading.Event object at 0x7f71f4336b50>, thread_id = 0
thread = <Thread(thread-0, started 140127414208064)>, start = 1605252233.5110781

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw13] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=35183)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/cisco/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.cisco.telnet_default_creds.Exploit object at 0x7f71f5486430>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.cisco.telnet_default_creds.Exploit object at 0x7f71f5486430>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f71f42bf490>,)
kwargs = {}, threads = [<Thread(thread-0, started 140127334561344)>]
threads_running = <threading.Event object at 0x7f71f42bf400>, thread_id = 0
thread = <Thread(thread-0, started 140127334561344)>, start = 1605252233.5454838

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw3] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=39231)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/siemens/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.siemens.telnet_default_creds.Exploit object at 0x7ff5f56e9c40>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.siemens.telnet_default_creds.Exploit object at 0x7ff5f56e9c40>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7ff5f56cc280>,)
kwargs = {}, threads = [<Thread(thread-0, started 140694379198016)>]
threads_running = <threading.Event object at 0x7ff5f56cc2e0>, thread_id = 0
thread = <Thread(thread-0, started 140694379198016)>, start = 1605252233.6800356

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw8] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=35105)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:1234"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/sentry360/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.sentry360.telnet_default_creds.Exploit object at 0x7f0b0a31ee50>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.sentry360.telnet_default_creds.Exploit object at 0x7f0b0a31ee50>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f0b0a31ea60>,)
kwargs = {}, threads = [<Thread(thread-0, started 139685401445952)>]
threads_running = <threading.Event object at 0x7f0b0bebcaf0>, thread_id = 0
thread = <Thread(thread-0, started 139685401445952)>, start = 1605252233.6817625

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw9] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=37213)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:1234"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/speco/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.speco.telnet_default_creds.Exploit object at 0x7fc239fa2d60>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.speco.telnet_default_creds.Exploit object at 0x7fc239fa2d60>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fc239fa2a00>,)
kwargs = {}, threads = [<Thread(thread-0, started 140472164132416)>]
threads_running = <threading.Event object at 0x7fc239fa22e0>, thread_id = 0
thread = <Thread(thread-0, started 140472164132416)>, start = 1605252233.699055

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw3] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=40883)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/comtrend/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.comtrend.telnet_default_creds.Exploit object at 0x7ff5f56a1250>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.comtrend.telnet_default_creds.Exploit object at 0x7ff5f56a1250>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7ff5f56a17c0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140694370281024)>]
threads_running = <threading.Event object at 0x7ff5f56a1220>, thread_id = 0
thread = <Thread(thread-0, started 140694370281024)>, start = 1605252233.724645

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw3] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=41863)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "1234:1234", "root:12345", "root:root"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/dlink/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.dlink.telnet_default_creds.Exploit object at 0x7ff5f56a2dc0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.dlink.telnet_default_creds.Exploit object at 0x7ff5f56a2dc0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7ff5f56a2ee0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140694360839744)>]
threads_running = <threading.Event object at 0x7ff5f56a2c70>, thread_id = 0
thread = <Thread(thread-0, started 140694360839744)>, start = 1605252233.7566667

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw3] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=41469)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:", "maintainer:bcpb+serial#", "maintainer:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/fortinet/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.fortinet.telnet_default_creds.Exploit object at 0x7ff5f56d9bb0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.fortinet.telnet_default_creds.Exploit object at 0x7ff5f56d9bb0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7ff5f56d9550>,)
kwargs = {}, threads = [<Thread(thread-0, started 140694352184896)>]
threads_running = <threading.Event object at 0x7ff5f56d9610>, thread_id = 0
thread = <Thread(thread-0, started 140694352184896)>, start = 1605252233.7890117

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw5] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=43727)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 8
        assert exploit.usernames == ["admin"]
        assert type(exploit.passwords) is list
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/generic/test_telnet_bruteforce.py:21: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_bruteforce.py:82: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.generic.telnet_bruteforce.Exploit object at 0x7f5f2ce213d0>
threads_number = 8
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.generic.telnet_bruteforce.Exploit object at 0x7f5f2ce213d0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f5f2ce21400>,)
kwargs = {}
threads = [<Thread(thread-0, started 140046760617536)>, <Thread(thread-1, started 140046769534528)>, <Thread(thread-2, started 1...arted 140046535489088)>, <Thread(thread-4, started 140046527096384)>, <Thread(thread-5, started 140046518703680)>, ...]
threads_running = <threading.Event object at 0x7f5f2ce21310>, thread_id = 7
thread = <Thread(thread-7, started 140046501918272)>, start = 1605252235.2632642

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw5] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=42049)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 8
        assert type(exploit.defaults) is list
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/generic/test_telnet_default.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.generic.telnet_default.Exploit object at 0x7f5f2d6c40a0>
threads_number = 8
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.generic.telnet_default.Exploit object at 0x7f5f2d6c40a0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f5f2d6c4e50>,)
kwargs = {}
threads = [<Thread(thread-0, started 140046493525568)>, <Thread(thread-1, started 140046485132864)>, <Thread(thread-2, started 1...arted 140045923116608)>, <Thread(thread-4, started 140045914723904)>, <Thread(thread-5, started 140045906331200)>, ...]
threads_running = <threading.Event object at 0x7f5f2d6c4430>, thread_id = 7
thread = <Thread(thread-7, started 140045889545792)>, start = 1605252235.3193452

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw4] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=39683)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "root:admin", "admin:"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/ipfire/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.ipfire.telnet_default_creds.Exploit object at 0x7f2d666674c0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.ipfire.telnet_default_creds.Exploit object at 0x7f2d666674c0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f2d66667460>,)
kwargs = {}, threads = [<Thread(thread-0, started 139832860866112)>]
threads_running = <threading.Event object at 0x7f2d642bac70>, thread_id = 0
thread = <Thread(thread-0, started 139832860866112)>, start = 1605252236.0726218

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw14] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=46241)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:password"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/belkin/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.belkin.telnet_default_creds.Exploit object at 0x7f75dc575fa0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.belkin.telnet_default_creds.Exploit object at 0x7f75dc575fa0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f75dc5f7130>,)
kwargs = {}, threads = [<Thread(thread-0, started 140144111777344)>]
threads_running = <threading.Event object at 0x7f75dc46a100>, thread_id = 0
thread = <Thread(thread-0, started 140144111777344)>, start = 1605252246.6862416

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw6] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=37133)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/bhu/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.bhu.telnet_default_creds.Exploit object at 0x7f66e9a3af40>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.bhu.telnet_default_creds.Exploit object at 0x7f66e9a3af40>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f66e9a3a790>,)
kwargs = {}, threads = [<Thread(thread-0, started 140079869183552)>]
threads_running = <threading.Event object at 0x7f66e9a3ac10>, thread_id = 0
thread = <Thread(thread-0, started 140079869183552)>, start = 1605252247.4558854

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw2] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=34011)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/billion/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.billion.telnet_default_creds.Exploit object at 0x7fd2a5d4b520>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.billion.telnet_default_creds.Exploit object at 0x7fd2a5d4b520>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fd2a5d495e0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140542720181824)>]
threads_running = <threading.Event object at 0x7fd2a5d49820>, thread_id = 0
thread = <Thread(thread-0, started 140542720181824)>, start = 1605252251.1584554

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw2] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=36823)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/mikrotik/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.mikrotik.telnet_default_creds.Exploit object at 0x7fd2a5d4d3d0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.mikrotik.telnet_default_creds.Exploit object at 0x7fd2a5d4d3d0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fd2a5d4d940>,)
kwargs = {}, threads = [<Thread(thread-0, started 140542711264832)>]
threads_running = <threading.Event object at 0x7fd2a5d4d1c0>, thread_id = 0
thread = <Thread(thread-0, started 140542711264832)>, start = 1605252251.197348

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw14] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=46595)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:password", "root:admin", "linksys:"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/linksys/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.linksys.telnet_default_creds.Exploit object at 0x7f75dc42a190>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.linksys.telnet_default_creds.Exploit object at 0x7f75dc42a190>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f75dc42a250>,)
kwargs = {}, threads = [<Thread(thread-0, started 140143004464704)>]
threads_running = <threading.Event object at 0x7f75dc1d2160>, thread_id = 0
thread = <Thread(thread-0, started 140143004464704)>, start = 1605252249.990527

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw4] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=38837)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:abc123", "super:juniper123", "admin:<<< %s(un='%s') = %u."]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/juniper/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.juniper.telnet_default_creds.Exploit object at 0x7f2d641df6d0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.juniper.telnet_default_creds.Exploit object at 0x7f2d641df6d0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f2d641c8e20>,)
kwargs = {}, threads = [<Thread(thread-0, started 139832852473408)>]
threads_running = <threading.Event object at 0x7f2d641c8fd0>, thread_id = 0
thread = <Thread(thread-0, started 139832852473408)>, start = 1605252254.1502252

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw0] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=43595)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()
        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/cameras/stardot/test_telnet_default_creds.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.cameras.stardot.telnet_default_creds.Exploit object at 0x7fe2229db550>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.cameras.stardot.telnet_default_creds.Exploit object at 0x7fe2229db550>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fe2229db670>,)
kwargs = {}, threads = [<Thread(thread-0, started 140609109096000)>]
threads_running = <threading.Event object at 0x7fe2205c7e20>, thread_id = 0
thread = <Thread(thread-0, started 140609109096000)>, start = 1605252257.4347243

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw0] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=38805)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:1234", "admin:"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/netgear/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.netgear.telnet_default_creds.Exploit object at 0x7fe222992a60>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.netgear.telnet_default_creds.Exploit object at 0x7fe222992a60>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fe222992ca0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140609100703296)>]
threads_running = <threading.Event object at 0x7fe222992b20>, thread_id = 0
thread = <Thread(thread-0, started 140609100703296)>, start = 1605252257.4738066

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw1] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=35451)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:", "Admin:admin", "user:user", "vodafone:vodafone", "user:HuaweiUser", "telecomadmin:admintelecom", "root:admin", "digicel:digicel"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/huawei/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.huawei.telnet_default_creds.Exploit object at 0x7f1c89d00a90>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.huawei.telnet_default_creds.Exploit object at 0x7f1c89d00a90>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f1c89d001c0>,)
kwargs = {}, threads = [<Thread(thread-0, started 139760433616448)>]
threads_running = <threading.Event object at 0x7f1c89d00a60>, thread_id = 0
thread = <Thread(thread-0, started 139760433616448)>, start = 1605252259.3052542

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw9] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=41361)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "1234:1234"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/movistar/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.movistar.telnet_default_creds.Exploit object at 0x7fc238e84370>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.movistar.telnet_default_creds.Exploit object at 0x7fc238e84370>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7fc2385a91c0>,)
kwargs = {}, threads = [<Thread(thread-0, started 140471938577984)>]
threads_running = <threading.Event object at 0x7fc2385a9760>, thread_id = 0
thread = <Thread(thread-0, started 140471938577984)>, start = 1605252269.8133855

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw7] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=42249)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:password"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/thomson/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.thomson.telnet_default_creds.Exploit object at 0x7f54f2bcafd0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.thomson.telnet_default_creds.Exploit object at 0x7f54f2bcafd0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f54f2bcad90>,)
kwargs = {}, threads = [<Thread(thread-0, started 140002815899200)>]
threads_running = <threading.Event object at 0x7f54f2d83070>, thread_id = 0
thread = <Thread(thread-0, started 140002815899200)>, start = 1605252270.2184758

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw7] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=33901)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/tplink/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.tplink.telnet_default_creds.Exploit object at 0x7f54f29cf5e0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.tplink.telnet_default_creds.Exploit object at 0x7f54f29cf5e0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f54f29cf640>,)
kwargs = {}, threads = [<Thread(thread-0, started 140002807506496)>]
threads_running = <threading.Event object at 0x7f54f2ddaa00>, thread_id = 0
thread = <Thread(thread-0, started 140002807506496)>, start = 1605252271.0609019

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw4] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=35125)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "guest:guest"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/netcore/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.netcore.telnet_default_creds.Exploit object at 0x7f2d641f7f40>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.netcore.telnet_default_creds.Exploit object at 0x7f2d641f7f40>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f2d641f7e20>,)
kwargs = {}, threads = [<Thread(thread-0, started 139832860866112)>]
threads_running = <threading.Event object at 0x7f2d641f7cd0>, thread_id = 0
thread = <Thread(thread-0, started 139832860866112)>, start = 1605252272.2294476

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw13] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=36433)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/netsys/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.netsys.telnet_default_creds.Exploit object at 0x7f71f4291340>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.netsys.telnet_default_creds.Exploit object at 0x7f71f4291340>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f71f4291430>,)
kwargs = {}, threads = [<Thread(thread-0, started 140127334561344)>]
threads_running = <threading.Event object at 0x7f71f42911c0>, thread_id = 0
thread = <Thread(thread-0, started 140127334561344)>, start = 1605252275.668178

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw13] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=46091)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:1234", "admin:user"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/zyxel/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.zyxel.telnet_default_creds.Exploit object at 0x7f71f42bfdc0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.zyxel.telnet_default_creds.Exploit object at 0x7f71f42bfdc0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f71f42bf610>,)
kwargs = {}, threads = [<Thread(thread-0, started 140127414208064)>]
threads_running = <threading.Event object at 0x7f71f42bfa90>, thread_id = 0
thread = <Thread(thread-0, started 140127414208064)>, start = 1605252275.7056296

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw1] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=33305)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:password", "admin:1234", "Administrator:"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/technicolor/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.technicolor.telnet_default_creds.Exploit object at 0x7f1c884a7970>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.technicolor.telnet_default_creds.Exploit object at 0x7f1c884a7970>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f1c884a76d0>,)
kwargs = {}, threads = [<Thread(thread-0, started 139760442009152)>]
threads_running = <threading.Event object at 0x7f1c89cfc070>, thread_id = 0
thread = <Thread(thread-0, started 139760442009152)>, start = 1605252277.3891928

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw6] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=35623)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "root:ubnt", "ubnt:ubnt"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/ubiquiti/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.ubiquiti.telnet_default_creds.Exploit object at 0x7f66e8175cd0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.ubiquiti.telnet_default_creds.Exploit object at 0x7f66e8175cd0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f66e8175a90>,)
kwargs = {}, threads = [<Thread(thread-0, started 140079869183552)>]
threads_running = <threading.Event object at 0x7f66e81bcd90>, thread_id = 0
thread = <Thread(thread-0, started 140079869183552)>, start = 1605252295.5741363

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw12] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=46689)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "ZXDSL:ZXDSL", "user:user", "on:on", "root:Zte521", "root:W!n0&oO7."]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/zte/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.zte.telnet_default_creds.Exploit object at 0x7f8214b909a0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.zte.telnet_default_creds.Exploit object at 0x7f8214b909a0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f8214b90e20>,)
kwargs = {}, threads = [<Thread(thread-0, started 140196705175104)>]
threads_running = <threading.Event object at 0x7f8214b90df0>, thread_id = 0
thread = <Thread(thread-0, started 140196705175104)>, start = 1605252298.8108032

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
______________________________ test_check_success ______________________________
[gw10] linux -- Python 3.9.0 /usr/bin/python3

generic_target = TelnetServiceMock(host='127.0.0.1', port=34637)

    def test_check_success(generic_target):
        """ Test scenario - testing against Telnet server """

        exploit = Exploit()

        assert exploit.target == ""
        assert exploit.port == 23
        assert exploit.threads == 1
        assert exploit.defaults == ["admin:admin", "admin:password", "root:root", "Admin:Admin"]
        assert exploit.stop_on_success is True
        assert exploit.verbosity is True

        exploit.target = generic_target.host
        exploit.port = generic_target.port

        assert exploit.check() is True
>       assert exploit.check_default() is not None

tests/creds/routers/asus/test_telnet_default_creds.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
routersploit/core/exploit/exploit.py:187: in wrapper
    return fn(self, *args, **kwargs)
routersploit/modules/creds/generic/telnet_default.py:80: in check_default
    self.run_threads(self.threads, self.target_function, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <routersploit.modules.creds.routers.asus.telnet_default_creds.Exploit object at 0x7f649a0595e0>
threads_number = 1
target_function = <bound method Exploit.target_function of <routersploit.modules.creds.routers.asus.telnet_default_creds.Exploit object at 0x7f649a0595e0>>
args = (<routersploit.core.exploit.exploit.LockedIterator object at 0x7f64a12fc8b0>,)
kwargs = {}, threads = [<Thread(thread-0, stopped 140070044825152)>]
threads_running = <threading.Event object at 0x7f64a12fc190>, thread_id = 0
thread = <Thread(thread-0, stopped 140070044825152)>, start = 1605252220.9601402

    def run_threads(self, threads_number: int, target_function: any, *args, **kwargs) -> None:
        """ Run function across specified number of threads

        :param int thread_number: number of threads that should be executed
        :param func target_function: function that should be executed accross specified number of threads
        :param any args: args passed to target_function
        :param any kwargs: kwargs passed to target function
        :return None
        """

        threads = []
        threads_running = threading.Event()
        threads_running.set()

        for thread_id in range(int(threads_number)):
            thread = threading.Thread(
                target=target_function,
                args=chain((threads_running,), args),
                kwargs=kwargs,
                name="thread-{}".format(thread_id),
            )
            threads.append(thread)

            print_status("{} thread is starting...".format(thread.name))
            thread.start()

        start = time.time()
        try:
>           while thread.isAlive():
E           AttributeError: 'Thread' object has no attribute 'isAlive'

routersploit/core/exploit/exploit.py:114: AttributeError
=========================== short test summary info ============================
FAILED tests/exploits/misc/miele/test_pg8528_path_traversal.py::test_check_success
FAILED tests/exploits/cameras/xiongmai/test_uc_httpd_path_traversal.py::test_check_success
FAILED tests/creds/cameras/avigilon/test_telnet_default_creds.py::test_check_success
FAILED tests/exploits/routers/tplink/test_wdr740nd_wdr740n_path_traversal.py::test_check_success
FAILED tests/creds/cameras/geovision/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/dlink/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/acti/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/acti/test_webinterface_default_creds.py::test_check_success
FAILED tests/creds/cameras/axis/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/axis/test_webinterface_http_auth_default_creds.py::test_check_success
FAILED tests/creds/cameras/arecont/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/avtech/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/basler/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/brickcom/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/canon/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/basler/test_webinterface_default_creds.py::test_check_success
FAILED tests/creds/cameras/brickcom/test_webinterface_http_auth_default_creds.py::test_check_success
FAILED tests/creds/cameras/canon/test_webinterface_default_creds.py::test_check_success
FAILED tests/creds/cameras/cisco/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/honeywell/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/vacron/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/grandstream/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/hikvision/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/iqinvision/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/videoiq/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/american_dynamics/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/asmax/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/asmax/test_webinterface_http_auth_default_creds.py::test_check_success
FAILED tests/creds/cameras/jvc/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/samsung/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/mobotix/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/cisco/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/siemens/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/sentry360/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/speco/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/comtrend/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/dlink/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/fortinet/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/generic/test_telnet_bruteforce.py::test_check_success - At...
FAILED tests/creds/generic/test_telnet_default.py::test_check_success - Attri...
FAILED tests/creds/routers/ipfire/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/belkin/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/bhu/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/billion/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/mikrotik/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/linksys/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/juniper/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/cameras/stardot/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/netgear/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/huawei/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/movistar/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/thomson/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/tplink/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/netcore/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/netsys/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/zyxel/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/technicolor/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/ubiquiti/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/zte/test_telnet_default_creds.py::test_check_success
FAILED tests/creds/routers/asus/test_telnet_default_creds.py::test_check_success
================== 60 failed, 254 passed in 176.95s (0:02:56) ==================

Expected Behavior

The tests should cleanly pass.

On python 3.8, they do (mostly) pass, but report one warning:

  /build/routersploit/src/routersploit-3.4.0/routersploit/core/exploit/exploit.py:114: DeprecationWarning: isAlive() is deprecated, use is_alive() instead
    while thread.isAlive():

This was deprecated in python 3.7 and 3.8 and removed in python 3.9, and the python 2.7 documentation notes the new spelling was added in 2.6. The old isAlive alias was removed from the documentation in the initial python 3.0 release.

tirkarthi commented 3 years ago

I have created https://github.com/threat9/routersploit/pull/712 as a fix.