2020年6月30日 星期二

3uTools 2.12 強大的 iOS 檔案管理工具


昨天才介紹了限時免費的 IOTransfer,才發現根本是款陽春到不行的 iOS 管理工具,而 3uTools 不但免費而且是功能強大,突然有種幼幼班比上博士生的感覺,功能上除了常見的照片、音樂、影片、鈴聲、書籍管理之外,支援在工具中直接下載鈴聲、創建鈴聲、下載桌布、影片轉檔等等的實用功能,還有非常多的小小工具可以使用,也具備了刷機、JB 等功能,功能上應該與 iTools 有得比,讓我不禁懷疑應該只是同個寫血脈的軟體而已。
3uTools iOS 管理工具

△ 從 3uTools 軟體首頁就可以很清楚知道 iOS 裝置的狀態,包含空間使用狀態、是否 JB、型號、IMEI、序號、UDID、Apple ID Lock、iCloud 是否啟用、電池充電了幾次等等資訊。
3uTools iOS 管理工具
△ 可以直接透過工具查詢保固期限。
3uTools iOS 管理工具
△ 可以查看電池狀態,充電幾次都知道,我只充了 99 次也太少了一點吧!
3uTools iOS 管理工具
△ 有不同的佈景顏色可以更換。
3uTools iOS 管理工具


△ 從設定中可以綁定 Apple ID,就能很方便的透過 3uTools 來下載 APP 安裝使用。
3uTools iOS 管理工具
△ Apps 可以列出所有已經安裝的應用程式,也能檢測需要升級的應用程式,可以直接進行 APP 的更新。
3uTools iOS 管理工具
△ 方便的瀏覽相簿與照片
3uTools iOS 管理工具
△ 簡易的圖片瀏覽器,使用起來頗順暢的,想要轉到電腦的圖片,可以快速的 Export 到電腦當中存檔。
3uTools iOS 管理工具
△ 音樂管理也很簡單,只要將整個音樂目錄拖曳進去就能匯入音樂。
3uTools iOS 管理工具
△ 鈴聲管理可以匯入自己喜歡的鈴聲,也內建創造鈴聲的工具。
3uTools iOS 管理工具


△ 有豐富的鈴聲下載資源,可以透過軟體在線上視聽,喜歡的直接下載成手機鈴聲使用。
3uTools iOS 管理工具
△ 影片管理與幾款影片播放器做整合,可以很方便的加入圖片,若是沒有直接支援影片播放 APP,可以透過 Apps 裡面進去管理。
3uTools iOS 管理工具
△ 還有非常非常多的小工具可以使用,功能上算是相當全面的。
3uTools iOS 管理工具
△ 備份與還原的功能是必備的,我覺得自己管理備份會比 iTunes 清楚明白許多。
3uTools iOS 管理工具
△ 備份功能設可以自己去調整要備份的項目,並不是所有東西都一定備份,向是可以只備份照片、或是音樂不要備份等等,而安裝的 APP 也能自己勾選要備份的,像很多遊戲都很空間,就不一定要備份起來佔空間。
3uTools iOS 管理工具
△ 垃圾清理工具,能清除 iOS 裝置內的系統垃圾與 APP 垃圾之類的。
3uTools iOS 管理工具


△ 影片轉檔工具
3uTools iOS 管理工具
△ 資料轉移工具,若是新舊 iPhone 要搬家的話,這工具就很方便。
3uTools iOS 管理工具
△ 壓縮照片功能,這個我沒有實際測試,有可能是將手機內的照片縮小來達到縮減空間的功能,我個人不建議這麼做啦!除非手機裡的照片都已經有備份了。
3uTools iOS 管理工具
△ 圖示管理功能,透過滑鼠來進行排列,也可能將排序備份起來。
3uTools iOS 管理工具
△ 即時螢幕功能,若是要擷取畫面就可以省去手機螢幕截圖再存取檔案的麻煩,直接截圖到電腦就可以了!
3uTools iOS 管理工具
△ 可以關閉 iOS 更新通知
3uTools iOS 管理工具


△ 線上 APP 排行資訊,可以透過電腦來瀏覽熱門 APP,喜歡的就直接進行安裝。
3uTools iOS 管理工具
△ 線上的免費桌布,還有替你區分不同型號 iPhone 或是 iPad 使用。
3uTools iOS 管理工具
△ 刷機與 JB 功能,這部分我就沒有那麼熟悉了,看不懂就不要亂動就是了!

2020年6月22日 星期一

用 ping 與 arp 指令掃瞄區域網路設備,產生 IP 與 MAC 卡號對應表教學

這裡介紹如何使用 ping 與 arp 指令快速清查區域網路的電腦與網路設備,建立 IP 位址與網路卡 MAC 卡號對應表。
對於網路管理者(網管)來說,掃描區域網路設備、取得所有電腦的 IP 位址與 MAC 卡號對應表是基本的技能,而且也是一項時常需要做的工作,如果剛好臨時遇到需要掃描 IP 與 MAC 卡號,手上又沒有適合的軟體時,就可以使用各種作業系統都有內建的 ping 與 arp 指令來處理,以下是使用教學以及範例指令稿。

ping 與 arp 指令

ping 與 arp 指令是一般的 Windows、Mac OS X 與 Linux 系統都會內建的指令,所以使用這種方法掃描網路,完全不需要安裝任軟體,只需要撰寫一個簡單的指令稿即可,對於網管來說相當方便而且實用。

Linux 系統

這是適用於 Linux 系統的 bash 指令稿,執行後可以掃描整個 Class C 區域網路的 IP 與 MAC 卡號對應表:
#!/bin/bash
# Ping 區域網路中所有的 IP 位址
for ip in 192.168.1.{1..254}; do
  # 刪除舊的 arp 記錄
  sudo arp -d $ip > /dev/null 2>&1
  # 藉由 ping 取得新的 arp 資訊
  ping -c 5 $ip > /dev/null 2>&1 &
done

# 等待所有背景的 Ping 結束
wait

# 輸出 ARP table
arp -n | grep -v incomplete
我們使用 bash 的 for 迴圈,配合背景子行程的方式同時 ping 所有的網路設備,這樣可以讓程式大幅加速,幾秒鐘就可以 ping 完整個 Class C 網路,關於這種平行化 bash 指令稿的撰寫方式,可以參考 Bash 平行執行背景子行程與 wait 的教學
執行之後,輸出會類似這樣:
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.1              ether   10:7b:ef:12:4f:af   C                     wlan0
192.168.1.102            ether   74:23:44:23:d3:96   C                     wlan0
192.168.1.105            ether   28:e3:1f:50:b9:94   C                     wlan0

Mac OS X 系統

在 Mac OS X 中使用 ping 與 arp 的 bash 指令稿與 Linux 幾乎相同,只是在 arp 指令的參數有些差異:
#!/bin/bash
# Ping 區域網路中所有的 IP 位址
for ip in 140.110.99.{1..254}; do
  # 刪除舊的 arp 記錄
  sudo arp -d $ip > /dev/null 2>&1
  # 藉由 ping 取得新的 arp 資訊
  ping -c 5 $ip > /dev/null 2>&1 &
done

# 等待所有背景的 Ping 結束
wait

# 輸出 ARP table
arp -na | grep -v incomplete
輸出的格式有些不同:
? (192.168.1.4) at 70:28:8b:26:1b:ba on en1 ifscope [ethernet]
? (192.168.1.11) at 60:e3:27:14:a5:dc on en1 ifscope [ethernet]
? (192.168.1.12) at 84:c9:b2:78:cd:ee on en1 ifscope [ethernet]

Windows 系統

Windows 系統上使用 ping 與 arp 指令的方式比較不同,不過大原則是一樣的,都是用 ping 指令掃過一輪之後,執行 arp 指令輸出 arp table,請開啟命令提示字元,執行以下的指令。
首先刪除舊的 arp table,這一行需要用管理者權限執行
arp -d
使用 for 迴圈將每一個 IP 位址都 ping 過一次:
for /L %i in (1,1,254) do ping 192.168.1.%i -n 1 -w 300 > NUL
執行 arp 指令,輸出 arp table:
arp -a | find "192.168" | find "動態"

arping 指令

arping 是一個類似 ping 的小工具,可以對區域網路中的設備送出 arp 請求封包,用更低階的方式檢查網路連線狀況,這裡我們示範使用 arping 取得 IP 位址與網路卡 MAC 卡號對應表的作法。
arping 只適用於 Linux 與 Mac OS X,Windows 系統則要使用 cygwin 安裝。
在 Debian 系列的 Linux,可以使用 apt 安裝 apring 工具:
sudo apt-get install arping
使用 arping ping 特定的 IP 位址:
arping -I wlp3s0 -w 3 -f 192.168.1.1
ARPING 192.168.1.1 from 192.168.1.104 wlp3s0
Unicast reply from 192.168.1.1 [10:7B:EF:12:4F:AF]  2.749ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
arping 輸出訊息中就有包含 IP 與 MAC 卡號的資訊,所以只要掃過每個 IP 位址,再用 grep 整理一下即可,以下是使用 arping 來 ping 整個區域網路所有 IP 位址的 bash 指令稿:
#!/bin/bash
# 用 arping 來 ping 區域網路中所有的 IP 位址
for ip in 192.168.1.{1..254}; do
  arping -I wlp3s0 -w 3 -f $ip | grep reply &
done

# 等待所有背景的 arping 結束
wait
Unicast reply from 192.168.1.1 [10:7B:EF:12:4F:AF]  7.072ms
Unicast reply from 192.168.1.103 [74:23:44:23:D3:96]  179.119ms
Unicast reply from 192.168.1.102 [28:E3:1F:50:B9:94]  219.907ms
參考資料:Linux.comPCNETStackOverflowHaoming

Bash 程式設計教學:平行執行背景子行程,用 wait 等待工作結束


本篇介紹在 Bash shell 中如何使用 wait 等待背景子行程的執行,並取回每個行程執行結果。
在 shell 程式設計中,為了讓程式執行起來更有效率,有時會讓多個子行程(subprocess)以 spawn 的方式放在背景執行,平行處理多項不同的工作,通常將需要等待硬碟 I/O 或網路回應的工作放在背景,可以程式執行的速度加快很多。
而在產生多個子行程之後,我們通常還會需要在程式的某處等待這些工作完成,並且取回執行結果,檢查每個工作是否有執行成功,這個部份就可以使用 wait

使用 wait 等待子行程(LibreOffice 原始檔
以下是一些典型的使用範例程式碼。

wait 等待子行程結束

wait 最基本的作用就是等待所有的子行程都結束,然後才繼續執行之後的工作:
#!/bin/bash
echo "Start"

# 平行處理多個工作
sleep 3 && echo "Job 1 is done" &
sleep 2 && echo "Job 2 is done" &
sleep 1 && echo "Job 3 is done" &

# 等待所有工作完成
wait

echo "Done"
這裡我放了三個測試用的指令,讓它們平行在背景執行,當每個工作完成時會輸出一行訊息,我故意安排讓執行時間比較久的工作先執行,觀察它們完成的順序。
執行之後,結果如下:
Start
Job 3 is done
Job 2 is done
Job 1 is done
Done
這裡的 Job 1 雖然是第一個執行的,但因為它需要最常的執行時間,所以最慢完成,wait 會在所有工作都結束之後,才繼續執行後續的指令。

取得子行程執行結果

放在背景執行的工作若處理結果不如預期,可能就會影響以後的程式執行,所以在子行程結束之後,通常都需要檢查一下其傳回值,確認是否每個工作都有正常完成。
wait 指令可以在其參數中指定要等待的子行程 ID,這樣的話 wait 就會等待至指定的子行程執行結束,並傳回該子行程的傳回值,以下是一個簡單的範例:
#!/bin/bash
sleep 2 && true &    # 成功
#sleep 2 && false &  # 失敗
PID=$!     # 取得上一個背景行程的 ID
wait $PID  # 等待背景行程執行完畢

# 檢查背景行程的傳回值
if [ $? -eq 0 ]; then
  echo "Success."
else
  echo "Fail!"
fi
Success.
這個範例將 sleep 放在背景執行,然後靠著 Bash 的特殊變數 $! 取得這個背景行程的行程 ID,並將這個行程 ID 傳給 wait,等待這個背景工作執行完畢,最後再從 Bash 的特殊變數 $? 取得 wait 的傳回值(也就是子行程的傳回值),檢查這個背景工作是否有執行成功。

取得多個子行程執行結果

以下是一個比較複雜一點的範例,在背景工作結束之後,會計算失敗的工作數,判斷所有工作是否都正常完成。
#!/bin/bash
# 計算失敗的工作
FAIL=0

# 平行處理多個工作
sleep 3 && echo "Job 1 is done" && true &  # 成功
sleep 2 && echo "Job 2 is fail" && false & # 失敗
sleep 1 && echo "Job 3 is done" && true &  # 成功

# 對每一個子行程執行 wait
for job in `jobs -p`
do
  echo "Wait job: ${job}"
  wait $job || let FAIL+=1
done

# 檢查失敗工作數
if [ $FAIL -eq 0 ]; then
  echo "All jobs are done."
else
  echo "${FAIL} jobs fail!"
fi
Wait job: 3598
Job 3 is done
Job 2 is fail
Job 1 is done
Wait job: 3599
Wait job: 3600
1 jobs fail!
這個範例跟上一個大同小異,不過我們同時執行好幾個背景行程,然後使用 jobs -p 取得所有背景行程的行程 ID,放進 for 迴圈中逐一呼叫 wait,並將執行失敗的背景行程數目記錄下來。
參考資料:StackOverflow