管控孩子PC的相关程序
本帖最后由 sunbeat 于 2020-4-16 11:10 编辑一、程序的组成
1.1 本程序server端
server的daemon端,也即是ChildGuard.py,默认监听在8888端口。
运行时,会申请管理员身份运行,如果没有管理员权限,也可以运行。
其用到了MyTTS.py模块,该模块主要负责调用百度的api接口,文字转语音,然后播放它,以及语音转文字(暂未用)。
百度的API还不错,比讯飞的免费调用次数给的多些,请自行申请对应的相关APP_ID、API_KEY、SECRET_KEY信息
由于wav的pcm格式转mp3用的是pydub的AudioSegment,这个是调用的ffmpeg来实现,要先下载ffmpeg,并把它放在PATH能够得着的地方。
下载地址:http://ffmpeg.org/download.html
监听pc麦克风用的是pyaudio模块,默认在windows上,直接pip装不上,建议直接下载对应的windows版本下载到本地。
再pip install PyAudio*.whl来进行安装
Server端目前有个问题,就是必须在前台运行,不能后台(比如计划任务调用,比如windows服务调用)。
如果后台运行的话,相关的msg接口,相关的获得前台进程接口,都有问题(这个是windows安全性的限制),
目前还在研究偷explorer.exe的token,然后用它token运行ChildGuard.py,但各种坑,还在趟
(OpenProcess,OpenProcessToken,DuplicateTokenEx,CreateProcessWithTokenW)
1.2 本程序的client端
客户端部分,有几个:
1.2.1 ChildControl.py控制部分
这个我是放在家里的树莓派3B上运行,它负责死循环,每30s检查一下孩子pc的状态:
①获得当前运行的是什么程序,程序的标题是什么
②如果当前的前台程序在黑名单,那么kill它
③检查360浏览器的标题,含有相关关键字,kill它
④检查腾讯视频是否存在,kill它
⑤每30s抓拍一次电脑屏幕,以及摄像头抓拍一次
⑥每30s抓一端10s的麦克风录音
1.2.2 rpc_cmd.py的命令行cli部分
这个可以放在我的电脑上运行,或者放在树莓派上运行类似这样:
pi@raspberrypi:/var/www/html$ ./rpc_cmd.py
checking host=stanleypc,port=8888
http://stanleypc:8888>help
func=s.help()
['now', 'md5sum', 'wf', 'rf', 'my_exec', 'killProcess', 'getProcess', 'getActiveProcName', 'cpu_usage', 'mem_usage', 'dimm_info', 'msg', 'msgImm', 'get_path', 'tts', 'net_info', 'is_admin', 'GetSystemPowerStatus', 'uptime', 'create_time', 'username', 'disk_c_usage', 'disk_io_counters', 'net_io_counters', 'snapScreen', 'snapCam', 'snapMerge', 'snapAudio', 'll', 'exit', 'help', 'version']
http://stanleypc:8888>version
func=s.version()
v0.8.6.20200410
http://stanleypc:8888>tts(别玩游戏啦,快做作业!)
tts这个用得多,主要是会在它屏幕上显示一个对话框,上面有你发过去的文字,然后会在他电脑上,语音播报一下这段文字
1.2.3 update_childguard.py更新程序
这个会把我电脑里面最新的ChildGuard.py程序,去覆盖当前孩子pc上的。
但如何热更新,目前还摸索中。
现在只能是update_childguard.py完了后,
用ssh进孩子的电脑,netstat -ano|findstr 8888查看是哪个pid占8888端口,
然后taskkill /f /pid <PID>把ChildGuard.py进程杀掉
然后teamviewer连进孩子的电脑,再图像界面下,启动ChildGuard.py(前面ssh里面起的话,算后台起,API资源受限)
1.2.4 rpc_trans_file.py批量文件传送
这个会把我电脑to_trans/目录下的所有文件,都发到孩子pc上去
二、程序当前支持的功能:
now:取得当前孩子pc的时间
md5sum:给定文件名,返回对应的md5值(用于校验文件比对)
wf: 写data给到指定文件
rf: 读文件内容
my_exec : 执行指定的dos命令,返回标准输出的内容,和错误输出的内容
'killProcess', 给定pid,杀进程
'getProcess', 不加参数,返回所有进程信息;加pid返回pid进程信息;加caption信息,返回caption的进程信息
'getActiveProcName', 返回当前前台的进程信息
'cpu_usage', 返回当前cpu利用率
'mem_usage', 返回当前内存利用率
'dimm_info',返回当前物理内存条情况
'msg', 发指定的文本消息给孩子的电脑屏幕,并等待孩子点“确定”
'msgImm',发指定的文本消息给孩子的电脑屏幕,不等孩子点,直接返回
'get_path',获得当孩子pc上ChildGuard.py运行所在目录
'tts',发指定的文本消息给孩子的电脑屏幕,并语音播报给消息内容
'net_info',返回孩子pc上的网络信息内容
'is_admin', 判断ChildGuard.py是否是以管理员模式运行的
'GetSystemPowerStatus',判断电池电量等信息,方便今后的其他应急程序准备
'uptime', 获得电脑的运行时间
'create_time',获得ChildGuard.py的运行时间
'username', 获得当前ChildGuard.py是以哪个用户运行的
'disk_c_usage', 获得c盘的利用率
'disk_io_counters', 获得当前磁盘的io情况,建议间隔运行2次,取差值÷间隔时间,获得io流量
'net_io_counters', 获得网络io情况
'snapScreen',抓电脑屏幕
'snapCam', 抓摄像头拍照
'snapMerge', 抓电脑屏幕并抓摄像头拍照,然后把两者拼接到一个图片上
'snapAudio',抓电脑的麦克风录音一段指定时长(默认10s)
'll',类似linux的ls -l的输出信息
三、待完善支持功能
1、热更新
2、获得微信访问指定网址的内容。
目前GetForegroundWindow获得窗口句柄
再GetWindowText用窗口句柄获得标题,
用GetWindowThreadProcessId获得pid
用WMI接口用pid获得命令行信息
基本能覆盖各个浏览器标题内容,满足了大部分需求。
但如果用微信打开的网页链接,或者小程序之类的,这个标题text或者页面内容获得不到。
各位有什么思路,能把这个信息捕获到么?
3、黑名单的开启时间段
比如设置成晚上或者周末,可以使用黑名单的程序
4、防被杀
目前孩子只9岁,还找不到隐藏dos窗口的程序,将来可能就会了。
要考虑病毒方式双进程互动
5、目前用的是xmlrpc.server.SimpleXMLRPCServer,还没有身份验证机制,这个端口映射放公网的话,有些不太安全
……
四、补充下使用技巧
1、ChildControl.py中的轮询间隔
设置为30s,目前来看是折中后,比较合适的。
性能和及时性上,都可以保障
2、snap的文件太多了,list会耗时太长,
这个需要定期清理下
写了这个archive_snap_pic.py程序,在树莓派的crontab里面,每天早上6:30执行一次
30 6 * * * /var/www/html/archive_snap_pic.py >/tmp/archive_snap_pic.log 2>&1
3、snap后的照片分析
用孩子电脑摄像头抓拍了照片,可以用opencv简单判断下几个状态:
a、笔记本电脑合上了;b、孩子离开座位,没在电脑前;c、孩子坐在电脑前
目前还在研究opencv的玩法,大致只实现了上述的几个内容
4、ChildControl.py的部署技巧
目前是用schtasks.exe/create /tn child7777/tr "c:\users\stanley\childguard.py port=7777" /sc MINUTE /MO 15 /sd 2020/03/26 /st 16:32 /ru stanley /rp password123
这样通过计划任务,每15分钟执行一次childguard.py port=7777,来保障程序始终会运行。(所以程序内,要加锁,避免多开)
即使杀掉后,15分钟后又可以运行。
这样的方式,让一个ChildControl.py以7777端口监听启动,保留一个火种(但这个是后台启动的,API权限受限)
另外一个,就是通过teamviewer远程连进去,手工启动的了。
当然,目前还在研究自己写一个WatchDog的封装,以windows服务启动,想法儿能有前台的权限
fsmode 发表于 2020-4-22 09:08
楼主大神,能不能推荐几种简单的电脑监控软件 ,大人在外边上班,家里孩子用电脑上课,本来很信任孩子的, ...
Teamviewer、anydesk、向日葵这些,都可以远程管理电脑。
不过没有历史记录。
这也是我要写这个程序,来偶尔回看下,哪个时间点,孩子在做什么,好做到心中有数。 这个要支持,还要做个带加密保护隐藏进程的功能或者伪进程,要不孩子直接删除进程就废废了。
还要根据每天返回的信息,添加黑名单功能。
当了家长才知识家长真的很难,斗智斗勇还不能伤害,左右为难。 这个牛批 这个牛X~~ 先谢谢,后使用! 效果牛逼到炸裂,但是。。。纯小白看不懂 哈哈 这个牛 先收藏了 估计以后能用到!~!~ 很有用噢 30秒循环一次也太短了吧,感觉1~5分钟差不多 小P孩惨啦!