看板 Python 關於我們 聯絡資訊
之前還在念碩士的時候,因為有跑機械學習的需要,所以會連回家裡用性能比較好的桌機跑 通常都是在筆電上先用 Jupyter Notebook 跑一個縮尺的雛形確定可以跑起來,或是沒有犯下一些基本錯誤後,就扔回桌機開始用完整尺寸的資料庫跑訓練 遠端軟體是 TeamViewer,有設定可以遠端開機,在無線路由器也有設定對應的埠號轉送 不過常常發生剛關機三十分鐘還可以遠端開機,後來就睡死叫不醒的情況 後來才知道是因為 DHCP 更新後這台電腦沒有連線,即使網路卡是聆聽狀態也會被路由器從 ARP 快取表裡面被踢出去,理所當然的喚醒用的魔法封包就丟進黑洞了 ●解決方案.1 用靜態 ARP 綁定搭配封包轉送 雖然 NETGEAR 的家用規格路由器預設是沒有開放靜態 ARP 綁定的,但是可以用開發模式把 Telnet 功能打開,然後直接在終端機裡面下 ARP 相關的指令 不過每次都要開終端機也是有點麻煩,雖然我試驗過 NETGEAR 的路由器可以跑插在隨身碟裡面的 Shell Script,但我不太會寫 Shell,所以就拿 Python 來造輪子了 https://github.com/Suzhou65/Python-ARP-Tools 把這個腳本放在會持需連網、當作家用伺服器的樹莓派上面,設定需要持續維持在 ARP 快取表上面的裝置,還有帳號密碼,再把這個腳本寫進 Cron 排程裡面,之後它就會自動的檢查有沒有被踢掉,被踢掉就會幫你加回去 不過 NETGEAR 的家用路由器只要重新開機就會把 Telnet 關掉,這時候還要重新去開發模式把它重新打開,雖然是可以再加一個網頁解析器之類的自動去開發模式幫你打開它,不過好像又更複雜了 而且 MESH 類型的無線路由器不同裝置之間有獨立的 ARP 快取表,所以這招也不是萬用解法 ●解決方案.2 直接在內網用廣播的來尬廣 前面講到雖然被踢出 ARP 快取表了,但是網路卡還是在持續聆聽有沒有它的封包 那就直接在內網廣播魔法封包就好不是?實驗後還真的是這樣 https://github.com/Suzhou65/Python-Wake-on-LAN 於是寫出了這個專門轉送魔法封包的腳本,用 ROOT 權限開始跑之後它會監聽埠號 9 轉進來的封包,解碼確定是網路卡的 MAC 後就會對內用埠號 7 廣播發送魔法封包,並且在 Log 檔裡面記錄下在哪個時間點收到指定網路卡的喚醒事件 至於誰負責這個監聽跟轉送的工作?當然還是前面的樹莓派 有了這個轉發方案,就不用在弄靜態 ARP 綁定了,只要把外網對內的埠號 9 轉發給樹莓派,而且目標網路卡有在聆聽封包,都可以順利喚醒 -- while True: if girlfriend is None: continue else: break -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.231.115 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1642740293.A.342.html
vul81320: 推分享 01/21 13:51
cuteSquirrel: 讚y 01/21 14:31
Woqeker: 簽名檔不sleep一下嗎XD 01/21 15:25
洗洗睡嗎XD
TakiDog: 推推 01/21 20:56
art1: 提交紀錄很多內容都是空的,upload pypl needed version 才 01/23 03:03
art1: 開始有紀錄到修改內容的樣子... 01/23 03:03
之前用 Git 的習慣很差所以堆了一堆無用檔案 結果就是不論這兩個專案,還是其他的都有點肥(Jupyter Notebook 沒清除輸出跟暫存 其中一個專案還堆到 400MB,所以我用 BFG Repo-Cleaner 炸過一次減肥 ※ 編輯: takahashikag (122.116.15.4 臺灣), 01/23/2022 19:18:02