1. 程式人生 > 其它 >為了上班摸魚,我用Python監視老闆!

為了上班摸魚,我用Python監視老闆!

作為打工人來說,特別是996,、007的工作,除了乾飯之外,最緊張刺激的莫過於上班的時候偶爾偷偷閒,去池塘裡面摸摸魚。

一般人摸得哪些魚呢?聊天、微博、微信朋友圈、小遊戲、小說、股票基金等等。

摸魚的最大阻礙是什麼?當然是包工頭(老闆)了,他們恨不得打工人24小時不間斷地幹活。

但是人的精力是有限的,一天只能集中精力幹那麼幾個小時,其他時間需要通過摸魚來調劑有限,所以我們只要摸魚不被包工頭髮現,那是相當愉快的一件事情。

為此,我用 Python 寫了一個小工具——BOSS 來了,來監控老闆,減少摸魚被發現的概率。

思路

我們知道,每臺電腦或者手機等終端都有一個固定的 Mac 地址,而我們公司辦公區域有幾個 AP ,大家手機連線的都是距離自己最近的 AP ,所以理論上如果我知道老闆手機的 Mac 地址,然後掃描區域網的所有 Mac 地址,如果出現老闆手機的 Mac 地址,那麼老闆大概率是在我附近的,此時摸魚比較危險;如果沒有出現老闆額 Mac 地址,那麼老闆可能離我比較遠,此時摸魚比較安全。

基於上面思路,我要做的就是搞到老闆手機的 Mac 地址,然後不斷輪詢區域網的所有 Mac 地址,一旦發現出現老闆手機的 Mac 地址,我就老老實實幹活,一旦老闆的 Mac 地址消失了,就可以摸魚了。

實現

獲取老闆手機Mac地址

怎麼搞到老闆的手機 Mac 地址?

好多人聽到這個可能就感覺沒戲了!總不能把老闆的手機偷過來,然後去設定裡面找吧。

天無絕人之路,只要肯動腦,辦法可不少!

我的方法是這樣的。當其他同事沒有走動的時候,老闆來的時候,儲存一次區域網的 Mac 地址資訊,當老闆走的時候再儲存一次,然後比對,找出老闆手機的 Mac 地址。為了確保準確性,可以多試幾次。

獲取所有Mac地址

第一步,使用 ipconfig/all 命令,可以找到當前所處的網段:

第二步,使用輪詢命令逐個 ping 網段內的 IP ,這一步是為了建立 ARP 表。命令如下:

for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.1.%i

其中,192.168.1.%i 是要查詢的網段。

第三步,使用 arp 命令可以查詢所有的Mac地址,命令為:

arp -a

執行之後,你會看到類似下面的結果:

程式碼實現

思路已經得到驗證,準備工作也做好了,接下來就是程式碼實現了。

首先,我們根據上面的思路,先寫一個獲取區域網所有的 Mac 地址的方法。

def get_macs():
    # 執行cmd控制視窗,輸入“arp -a”,並將內容傳遞到res中
    res = os.popen("arp -a")
    # 讀取res資料,轉換為可讀資料
    arps = res.read()
    print(arps)

    # 將獲得的counts中的資料根據“換行符”來進行分割切片
    result = arps.split('\n')

    # 設一個空列表裝ip
    ips = []
    # 設一個空列表裝mac
    macs = []

    # 遍歷
    for i in range(1, len(result)):
        # 獲得列表中第idx個數據
        line = result[i]
        if ('Internet' in line) | ('' == line) | ('介面' in line):
            continue
        # 根據“ ”進行切片
        line_split = line.split(" ")
        index = 0
        for l in line_split:
            if l != '':
                index += 1
                if index == 1:
                    ips.append(l)
                elif index == 2:
                    macs.append(l)

    return ips, macs

然後,寫一個定時輪詢。

# 老闆的Mac地址
bossMac = "01-00-5e-0b-14-01"
sleep_time = 5
while 1 == 1:
    time.sleep(sleep_time)
    ips, macs = get_macs()
    is_come = 0
    for mac in macs:
        if mac == bossMac:
            is_come = 2
            # 如果boss來了,就隔5分鐘掃描一次
            sleep_time = 300
            # 提示報警
            choice = g.msgbox(msg="有內鬼,終止交易!", title="OMG")
            break
    if is_come == 0:
        # 如果boss走了,就隔5秒鐘掃描一次
        sleep_time = 5
        g.msgbox(msg="一切正常!", title="OMG")

我這裡設定的是:如果老闆出現了,就每隔 5 分鐘輪詢一次,因為老闆在的話,要集中精力幹活,不能太過頻繁地想著摸魚。如果老闆走了,就每隔5秒鐘輪詢一次,摸魚的時候還是要頻繁預警比較好!

執行程式,當老闆來時,預警彈窗是這樣子的:

當老闆消失後,彈窗內容是這樣的:

總結

當然,如果老闆沒有開 WiFi ,那麼這個方法就失效了。或者老闆過來了,但是 手機反應慢了,沒有切換到這邊的 AP ,那也會存在危險。所以不要完全依賴這個小工具,摸魚的時候還是要偶爾觀察一下週圍環境。

原始碼:https://github.com/JustDoPython/python-examples/tree/master/xianhuan/bosscoming

文末

您的點贊收藏就是對我最大的鼓勵!
歡迎關注我,分享Python乾貨,交流Python技術。
對文章有何見解,或者有何技術問題,歡迎在評論區一起留言討論!