Python实现对电脑的全程监控

简介:

首先声明一下:该点子非本人原创,我只是用它在Mac OS X上给出了实现。

需要三个文件,被发布在本人的GitHub上,有需要或想了解的请自行参考。

简单介绍下三个文件分别的作用:

pcMonitor.py--Python程序文件,用于实现开机监控以及强制关机的处理逻辑

com.yanghua.pcMonitorService.plist--Apple Mac OS X对于想要开机启动程序的描述文件。(在windows 上可能称之为开机启动计划)

pcMonitorService.sh--在com.yanghua.pcMonitorService.plist中描述的,需要被直接执行的程序。(系统开机自执行程序不支持直接执行Python脚本,所以通过执行执行该sh脚本,在该sh脚本中间接执行pcMonitor.py脚本)。

实现功能

(1)开机未登录 邮件自动提醒

(2)开机登陆后 邮件自动提醒

(3)回复提醒邮件以“shutdown”,则被开启的Mac 机器会被强制关闭

无论是否连接互联网:

(4)支持开机后,以一定的频率定时截取当前屏幕作为图像日志

备注:这些功能对于个人电脑常被借用、公用来说非常有用,便于个人对自己电脑的使用有即时了解。

原理简介

其实很简单,想要在手机和电脑之间产生交互,需要两个条件:
(1)连接 这个只能依赖于互联网了
(2)通信 通信离不开协议,这里选择的话,双方都可识别的,并且操作简便的,没有比通过邮件来实现更好的选择了。
上面提到了,com.yanghua.pcMonitorService.plist该文件用于使得该监控程序开机自动启动,它会间接执行pcMonitor.py脚本。该脚本被执行之后,将开启一个轮询程序。如果碰巧,它开完机就自动连接上了互联网,那么它将直接给你预留的邮箱中发送邮件,如果没有,在你发送邮件就会产生程序异常,此处异常被直接吞噬,只返回Boolean标示,休眠一段时间,继续发送,直到机器联网发送成功为止。为了达到即时的目的,你可能需要借助手机的某些工具(比如在手机的微信中开启QQ邮箱提醒功能,如果你没有QQ邮箱,那么其它邮件提供商很多也跟运营商进行了合作支持了邮箱与手机号码的绑定,这样在收到邮件的时候就可以支持短信提醒)。
至此发送结束,那么下面会进入接收邮件的侦听模式。当接收到标题为邮件提醒时发送的邮件标题(因为关机指令只需回复提醒邮件),并且邮件内容包含shutdown关键字的时候。将会执行关机命令:
关键代码:
if __name__ == '__main__':

    init()

    MAIL_TXT = "the computer has started %s" % time.strftime(' at %c')

    while True:
        if send_mail(MAIL_TITLE, MAIL_TXT):
            break
        else:
            time.sleep(60)

    while True:
        shutdown=receive_mail()
        if shutdown:
            shutdown_cmd ="shutdown -h now"
            print(shutdown_cmd)
            process=subprocess.Popen(shutdown_cmd, shell=True, universal_newlines=True, stdout=subprocess.PIPE)
            process.wait()
        else:
            print("sleep")
            time.sleep(60)      #sleep 60s

如何使其开机自动启动?

首先,需要编写开机启动程序的描述文件。
文件需要放到/Library/下(通过快捷键:shift+Command+G):

进入后,有两个相关的文件夹:

主要相关的文件夹就是这两个,但有什么区别呢?
LaunchAgents--存放在开机并登陆之后才会执行的计划任务
LaunchDaemons--存放在开机之后就会执行的计划任务
注:这两个文件夹的区别,也是我上面“实现功能”中的(1)、(2)两点的关键点,这就是取决于你将那个任务描述文件放在哪个文件夹内。
你可以直接将com.yanghua.xxx.plist文件直接拖放至两个文件夹的其中之一。因为该文件夹其实是系统相关的文件,所以需要授予其权限,所以在你拖放过程中可能需要输入密码。
或者,通过在Terminal中,通过cp命令来拷贝文件:

上面同时把其他的两个文件放到/usr/local/文件夹下,他们同样是系统相关文件,需要你在命令前加上“sudo”,同时有可能会要求键入password。
在操作某些系统级别相关的文件夹中的文件时,非超级管理员用户(root用户)可能没有执行权限,而在我们的程序里,我们程序的执行者其实就是当前登陆用户(因为它在用户登陆成功后,以其身份执行),而它肯定不是超级管理员。所以,必须为pcMonitorService.sh文件授予“其他用户可执行的权限”:

至此,大部分任务都完成了,还有一个非常关键的问题。回复的邮件:shutdown,其实只是一个给监控程序执行关机指令的“关键字”,它在程序里,却会真正执行shutdown的shell命令。众所周知,shutdown默认情况下只可以被root用户执行,其他用户是没有权限执行shutdown命令的。
所以需要两个步骤来给予其他用户以shutdown命令的执行权限:
(1)修改sudoers文件,执行命令sudo visudo

进入之后,按“i”进入编辑状态,修改最后一行:

为:
去掉最前面的#号,将users修改为你想执行监控脚本的用户名,比如:yanghua
然后为shutdown设置suid:

以上设置完成之后,基本上大功告成了!
关于代码,你还需要作一些修改,主要是关于pcMonitor中的,因为必须要你自己提供关于邮件地址相关的内容:
#TODO: change the e-mail address which you want to comunicate with monitor
MAIL_LIST   = ["XXXXXX@qq.com"]

#TODO: change the smtp/pop3 server which will serve for the monitor
MAIL_HOST   = "smtp.exmail.qq.com"
MAIL_POP    = "pop.exmail.qq.com"

#TODO: change the email-addr and pwd which the monitor will use
MAIL_USER   = "xxxx@qq.com"
MAIL_PASS   = "xxxxxxxxxx"
MAIL_FROM   = "xxxx@qq.com"

写在最后

由于很久不使用windows的原因(而且windows上也没有安装Python),所以只是给出了Mac OS X上的实现,其实该实现与所有Free BSD系统的实现都是类似的。只有开机启动程序的实现方式不一样。所以在其他平台只需让该程序开机执行即可。
你会告诉我?如果用户不联网,是不是就没有办法了。就目前来看确实是必须要联网才能实现上面的功能,但该程序只要电脑被开启就会不停地允许直到用户关闭,或者联网,如果某人想做什么操作,在未联网状态下进行,而你想知道,你可以试图获取全局的键盘监听事件、鼠标监听事件,甚至可以以一定频率的截屏来作为日志以进行保存!等到联网时,这些日志都将可以作为邮件自动发送给你(因为普通用户根本不知道你的这些幕后行为)。
最后,还是重申:不要恶意地使用你懂得的东西。否则后果自行负责!



原文发布时间为:2013-02-07

本文作者:vinoYang

本文来自云栖社区合作伙伴 CSDN博客,了解相关信息可以关注CSDN博客。
目录
相关文章
|
1月前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
|
1月前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
109 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
1月前
|
Android开发 Swift iOS开发
python 基于电脑蓝牙连接获取手机的实时数据
python 基于电脑蓝牙连接获取手机的实时数据
60 0
|
2月前
|
机器学习/深度学习 监控 TensorFlow
使用Python实现深度学习模型:智能宠物监控与管理
使用Python实现深度学习模型:智能宠物监控与管理
80 0
|
2月前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
45 1
|
2月前
|
监控 数据挖掘 Python
🔍解锁Python系统编程新姿势!文件系统操作与I/O管理,让你玩转电脑每一个角落
【9月更文挑战第11天】Python不仅在数据分析和Web开发中表现出色,其系统编程能力同样强大。本文通过实例详细介绍了Python如何高效地进行文件系统操作与I/O管理。利用`os`和`pathlib`模块,你可以轻松遍历、创建、删除和重命名文件及目录。通过示例代码,展示了如何递归遍历目录和高效读写大文件。此外,文章还介绍了使用`watchdog`库进行文件监控及利用`concurrent.futures`模块实现并发I/O操作的方法,帮助你构建更复杂的应用。无论简单读写还是高级操作,Python都能助你轻松管理电脑的每一个角落。
36 1
|
2月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
|
2月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
|
2月前
|
Python
python对电脑的操作,获取几核,获取操作系统,获取内存
python对电脑的操作,获取几核,获取操作系统,获取内存
|
3月前
|
数据采集 运维 监控
自动化运维:用Python打造简易监控系统
【8月更文挑战第31天】在追求高效的IT世界里,自动化运维不再是奢侈品而是必需品。本文将通过一个Python示例,展示如何构建一个简单的系统监控工具。从数据采集到警报触发,我们将一步步解锁自动化的秘密,让你的服务器管理变得轻松而高效。
下一篇
无影云桌面