ChildGuard是一款非常好用的孩子上網課時監督的軟件,該軟件不僅能夠看到孩子的一舉一動和電腦運行的各種程序,還能夠直接發送對話提醒孩子,能夠讓孩子更加專心的上網課,有需要的家長們不要錯過了,歡迎下載使用!
開發說明
為了簡化,只編譯了一個孩子電腦的server端,以及一個家長端的控制端。
當然,也可以把控制端放在孩子電腦上,一并執行
使用說明
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的輸出信息
程序介紹
本程序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上去




