2018年7月26日 星期四

以netcat取代ping監測設備是否online

這兩天在寫一個程式需要判斷手機是否在線上,一開始使用ping結果後來經過不斷測試(測試過休眠時WIFI保持連線,wakelock,powersaver,power optimization)發現,android手機(我是samsung note 8)只要按電源鍵休眠五分鐘後就會進入doze mode會block ping造成判斷失誤。經過survey後找到可以使用netcat/nmap(後來發現nmap需要另外安裝,我只有使用nmap掃描)獲取手機狀態可得知是否在線。

nc -w 4 -vz <port> <ip>

以下是我試出來可以使用的幾個Port
8080
6101 tcp backupexec
6789 tcp ibm-db2-admin
8701 tcp unknown
9593 tcp cba8
9595 tcp pds

另外由於port通常是close所以nc會是error,這個時候要把error save to file or variable需使用2>&1 std參數

20190131更新: 這幾天更新android後發現WIFI會連上又斷,經過檢查後確定問題應該出在android把我這個nc檢查的行為當成攻擊所以斷開wifi,經過加上sleep延長檢查時間後問題解決,我的機型是samsung note8,供參考。問題發生時好像會顯示不安全的網路及網路連線不可用,不太確定。


參考資料
自己
error output to file and variable