1. 程式人生 > >Python實現對電腦的全程監控

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   = ["[email protected]"]

#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   = "[email protected]"
MAIL_PASS   = "xxxxxxxxxx"
MAIL_FROM   = "[email protected]"

寫在最後

由於很久不使用windows的原因(而且windows上也沒有安裝Python),所以只是給出了Mac OS X上的實現,其實該實現與所有Free BSD系統的實現都是類似的。只有開機啟動程式的實現方式不一樣。所以在其他平臺只需讓該程式開機執行即可。你會告訴我?如果使用者不聯網,是不是就沒有辦法了。就目前來看確實是必須要聯網才能實現上面的功能,但該程式只要電腦被開啟就會不停地允許直到使用者關閉,或者聯網,如果某人想做什麼操作,在未聯網狀態下進行,而你想知道,你可以試圖獲取全域性的鍵盤監聽事件、滑鼠監聽事件,甚至可以以一定頻率的截圖來作為日誌以進行儲存!等到聯網時,這些日誌都將可以作為郵件自動傳送給你(因為普通使用者根本不知道你的這些幕後行為)。最後,還是重申:不要惡意地使用你懂得的東西。否則後果自行負責!

相關推薦

Python實現電腦全程監控

首先宣告一下:該點子非本人原創,我只是用它在Mac OS X上給出了實現。需要三個檔案,被髮布在本人的GitHub上,有需要或想了解的請自行參考。簡單介紹下三個檔案分別的作用:pcMonitor.py--Python程式檔案,用於實現開機監控以及強制關機的處理邏輯com.ya

python實現kafka中日誌資料監控報告(釘釘)

# !/usr/bin/env python # coding:utf-8 # 該指令碼是作統計 from datetime import datetime, timedelta import os from dingtalkchatbot.chatbot i

php如何利用python實現pdf文件的操作(讀寫、合並分割)

PHP實現pdf文件截取 PHP調用python腳本 php如何利用python實現對pdf文件的操作 需求:在PHP裏實現了把8.pdf的前4頁pdf文件截取出來生成新的pdf文件。 詳細步驟如下: 1. 安裝python第三方庫PyPDF2 前提:python必須是3.x版本以上,必要時需要升級p

大四應屆生用Python實現了遠程監控!壓根就不需要女友開視頻!

肉雞 找到 src 視頻 分享 設置 一個 ever 實時 使用要求: Sender代碼必須要在一臺有攝像頭的電腦上運行起來。然後把數據編碼,壓縮之後,再傳給另外一個電腦 Reciever作為接受端,沒什麽特別的要求。 兩個電腦都必須要按轉好numpy + ope

PHP如何利用Python實現PDF檔案的操作

需求:在PHP裡實現了把8.pdf的前4頁pdf檔案截取出來生成新的pdf檔案。 詳細步驟如下: 前提:python必須是3.x版本以上,必要時需要升級pip3,命令如下:pip3 install --upgrade pipPyPDF 自 2010年 12月開始就不在更新了,PyPDF2 接棒 PyPD

用windows7搭建FTP伺服器並且用python實現FTP伺服器的一系列

0x00:windows7搭建FTP伺服器 前言:windows7搭建FTP伺服器,必須是專業版以上的windows7才可以。(不要問我為什麼,我也不知道,我找了很多Key才換成旗艦版) 點箭頭指向的地方,就能把windows7家庭普通版換成專業版甚至旗艦版了

python實現caffe的訓練,初始權重訓練和繼續訓練

1、直接訓練 直接訓練比較簡單,幾行程式碼就可以搞定 import caffe caffe.set_device(0) caffe.set_mode_gpu() #solver root caffe_root = 'D:/caffe-ssd-micros

spring boot admin 實現服務的監控

service端: 專案依賴: <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactI

Arcgis+Python實現柵格歸一化處理

    影象歸一化就不多說了,就是(數值-min)/(max-min),把結果都劃歸到0-1範圍,便於不同變數之間的比較,取消了不同數量差別。 第一個方法,需要對柵格資料預先知道取值範圍。 第二種方法,比較好點,直接讀取屬性

Python實現Android截圖

背景: 測試過程中,總是需要對Android裝置進行截圖,然後在截圖中標註問題描述; 手動方式: 1.使用adb scrrencap /sdcard/screen.png 命令對Android裝置進行截圖 2.然後再使用adb pull /sdcard/scrren.pn

使用python實現安卓模擬器的自動化操作QQ!

這裡使用安卓模擬器自動實現qq登入,並且發一條說說,教程開始之前要安裝好python開發環境:在win7和ubuntu系統安裝Python開發環境,和安卓模擬器:使用夜神安卓模擬器建立安卓虛擬機器     安裝完成,就首先開啟Pycharm新建python專

python實現獲取電腦和嵌入式裝置(樹3)IP、主機名、Mac地址,並把這些資訊上傳雲伺服器。

import socket import uuid # 獲取主機名 hostname = socket.gethostname() #獲取IP ip = socket.gethostbyname(hostname) # 獲取Mac地址 def get_mac_address

基於python 實現圖片進行SVD

實現對圖片進行SVD 之前在學習截斷式SVD的時候, 不知道為什麼截斷式SVD後能夠近似原矩陣? 或者說奇異值究竟有什麼含義? 看了以下知乎的答案後, 有了很形象的理解 奇異值的物理意義是什麼?

python實現獲取電腦IP、主機名、Mac地址

import socket import uuid # 獲取主機名 hostname = socket.gethostname() #獲取IP ip = socket.gethostbyname(hostname) # 獲取Mac地址 def get_mac_

Python實現一個網路段掃描及埠掃描

近日網路安全老師佈置了一個題目,讓搞一個埠掃描器,心想沒有Python解決不了的問題,因為時間緊,就簡單的做了一個,沒有使用執行緒,電腦也比較low  速度較慢,湊合著也能跟著玩(埠掃描我用的是nmap,沒有使用socket,因此大家執行時要先安裝nmap,或者把namp掃

python實現HDFS的檔案操作

在HDFS中,要實現對檔案的操作,一般可以在shell中傳送指令完成,但這樣太麻煩了。 當然我們可以呼叫HDFS的API,這裡我們可以使用python的pyHdfs庫來實現對HDFS的檔案操作。 一、環境準備 1、python3.5 2、pyHdfs 二、pyHdfs安裝

python實現spark-history-server監控

由於history-server伺服器會經常出現自己掛掉的情況,用python寫了一個自動重啟的指令碼,放在系統裡用crontab定時,再也不用擔心任務掛了,伺服器也掛掉了。 思路很簡單,就是用ps指令檢測程序,如果沒有history-server,就把伺服器

Python實現12500張貓狗影象的精準分類

微信公眾號關鍵字全網搜尋最新排名【機器學習演算法】:排名第一【機器學習】:排名第一【Python

python實現元素的長截圖

一.目標 瀏覽網頁的時候,看見哪個元素,就能擷取哪個元素當圖片,不管那個元素有多長   二.所用工具和第三方庫 python ,PIL,selenium pycharm 三.程式碼部分 長截圖整體思路: 1.獲取元素 2.移動,截圖,移動,截圖,直到抵達元素的底部 3.把截圖按照元素所在位置切割,

python裝飾器實現異常代碼出現進行監控

args lin sha lines 監控腳本 一秒 readline utf 發送 異常,不應該存在,但是我們有時候會遇到這樣的情況,比如我們監控服務器的時候,每一秒去采集一次信息,那麽有一秒沒有采集到我們想要的信息,但是下一秒采集到了, 而