一学期就混过去了,期末折腾了这个东西,比较水。挺好玩的就分享一下。
思路
整合了两个分开的程序。
一个是利用邮箱收发命令实现屏幕截图监控以及其他一些基本操作的程序,为保证这个程序在被监控者的电脑后台持续运行,需要一个掩护程序。
我的掩护是一个爬网页图片并设置成桌面壁纸的程序,为保证壁纸实时更新,被监控者要在后台持续运行此程序。
更改壁纸
从指定的URL爬取壁纸
(这里我用的是cloudinary平台上传自己的图片,需要爬取一个固定的URL)
↓
利用pywin32模块将图片设置为桌面背景
↓
设置时间间隔,不断重复执行程序,实现桌面壁纸的实时更新
利用邮箱监控
利用poplib和smtplib模块,提供对POP和SMTP协议的支持,实现邮件收发
↓
email模块解析和构造邮件
↓
PIL模块的ImageGrab.grab()函数对电脑进行截屏
↓
通过邮件把电脑截屏返回邮箱
(利用os模块还可以控制电脑进行一些基本操作,如注销、关机)
实现效果
Step 1
在cloudinary上传自己的图片,这里我搞了个通知栏形式的壁纸。
网站会更新相应的url上的图片
Step 2
把url写入爬取程序
这个url写入程序以后如果打包成exe程序发给别人,以后就无法更改了,每次更新图片都放在这个相应的url里。
安一个Python的cloudinary模块,在平台上获取你自己的个人授权码(key, secret)
Step 3
由合法发件人邮箱发送邮件,命令填入主题行
收到带附件的回信

附件中的截屏文件
Part1: 邮件控制部分
程序设计思路
电脑每隔一段时间查看指定邮箱中是否收到了新的邮件,若未收到,则不进行任何操作,若收到了,则判断发件人的身份,若发件人为合法的控制者,则解析发件人的邮件,执行解析结果,否则忽略该邮件。
主要的两大类及其方法
邮件类

服务器类

SMTP协议及POP3协议原理
邮件传输原理
本质上:
1)编写MUA把邮件发到MTA。使用的协议是SMTP。
2)编写MUA从MDA上收邮件。使用的协议是POP3。
主要函数
send()

默认端口为25,选择默认端口并连接SMTP服务器,如果需要加密SMTP会话需要更改为相应端口。
利用email模块中的函数构造邮件并发送至SMTP服务器:
Tips:
1).邮件主题、发件人、收件人等信息并不是通过SMTP协议发送给MTA的,而是包含在发给MTA的文本中的。因此,必须把From、to、Subject添加到MIMEText中。
2).不能简单地传入nameaddr@example.com,包含中英文也包含地址的,要先用parseaddr()分离开中英文和地址,中英文用Header方法编码,然后用formataddr()方法把重新编码后的二者整合起来。
3).带附件的邮件可以看作包含若干部分的邮件。构造一个MIMETMultipart对象代表邮件本身,然后往里加上一个MIMEText作为邮件正文,加上表示截屏图片附件的MIMEBase对象即可。
get()

用poplib把邮件的原始文本下载到本地:
parse_message()
用email解析原始文本,还原为邮件对象:
run()

服务器类中主要利用while循环不断调用POP连接,并解析邮件中的命令,如果是截屏命令,则返回带截屏附件的邮件。
利用time.sleep()调整循环执行的时间间隔。
其他
1.部分电脑运行时,ImageGrab()抓取全屏失败,只能抓取屏幕的一部分。
措施:电脑的显示设置中的缩放改为100%
2.在成功发送屏幕截图之后利用os.remove()删除同路径下的screenshot.jpg文件。但是发送邮件需要时间,删除screenshot.jpg文件有延迟,会在exe文件的路径下出现截屏图片文件并停留几秒。
3.利用pyinstaller将程序打包为exe文件时,如果运用了第三方网站cloudinary,需要打包cloudinary模块。打包时命令行加入 -w 即不打开cmd。
4.在装有360的电脑上运行exe文件,可以正常使用壁纸爬取功能,但会被检测到有邮件的收发。