[心得] 從外網遠端喚醒電腦,魔法封包轉送

看板Python作者 (抽卡當然是為了性癖而抽)時間3年前 (2022/01/21 12:44), 3年前編輯推噓5(501)
留言6則, 5人參與, 3年前最新討論串1/1
之前還在念碩士的時候,因為有跑機械學習的需要,所以會連回家裡用性能比較好的桌機跑 通常都是在筆電上先用 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

01/21 13:51, 3年前 , 1F
推分享
01/21 13:51, 1F

01/21 14:31, 3年前 , 2F
讚y
01/21 14:31, 2F

01/21 15:25, 3年前 , 3F
簽名檔不sleep一下嗎XD
01/21 15:25, 3F
洗洗睡嗎XD

01/21 20:56, 3年前 , 4F
推推
01/21 20:56, 4F

01/23 03:03, 3年前 , 5F
提交紀錄很多內容都是空的,upload pypl needed version 才
01/23 03:03, 5F

01/23 03:03, 3年前 , 6F
開始有紀錄到修改內容的樣子...
01/23 03:03, 6F
之前用 Git 的習慣很差所以堆了一堆無用檔案 結果就是不論這兩個專案,還是其他的都有點肥(Jupyter Notebook 沒清除輸出跟暫存 其中一個專案還堆到 400MB,所以我用 BFG Repo-Cleaner 炸過一次減肥 ※ 編輯: takahashikag (122.116.15.4 臺灣), 01/23/2022 19:18:02
文章代碼(AID): #1XwZf5D2 (Python)
文章代碼(AID): #1XwZf5D2 (Python)