iT邦幫忙

2025 iThome 鐵人賽

DAY 11
1
佛心分享-IT 人自學之術

從零開始的 Linux 世界系列 第 11

【Day.11】自動化掃描,用 BashShell 解除你的雙手!

  • 分享至 

  • xImage
  •  

今天要來跟大家分享的是程式語言 「Bash」!

為什麼會突然要介紹程式語言呢?因為當你每個操作都要自己手動的時候肯定會覺得很麻煩!想像一下,如果有一個腳本可以每天幫你掃描鄰近的裝置,它的連接阜有哪些,然後幫你存檔放在 Windows 的桌面。等你每天下班或放學回家,直接看桌面的檔案有哪些內容,不就省略自己掃描的麻煩事嗎?

所以我們要結合這幾天練習的東西,製作一個簡單的腳本,讓你的 Kali Linux 在 24 小時都可以幫你工作!

✒️ Bash 是什麼?

Bash(Bourne Again Shell) 是 Unix Shell 的一種,發明的人是來自美國的 Brian J. Fox。當我們要跟電腦溝通的時候會經過「核心(Kernel)」和「硬體(Hardware)」。我們知道電腦就是一堆 0 跟 1 所組成的,那要如何能夠跟電腦溝通?就需要一個指令或是語言來組織你的「句子」。

Shell 這個東西究竟是什麼?它擁有很多不一樣的版本,例如:Bourne Shell(sh)、C SHell、K SHell 等等。而它的定位就像應用程式,讓使用者可以跟作業系統溝通,作業系統再跟硬體溝通,就如同雞蛋最外層的殼一樣,所以又稱為「殼程式」。

🍀 常用的 Bash 操作

如果有在寫程式的朋友一定不陌生,不管是在 Windows、MacOS、Linux 都可以看到 Shell,它擁有幾個好處和優點:

  1. Tab 快速補全指令或檔案
  2. 紀錄曾經使用的指令
  3. alias 設定指令的別名:假設我要查看資料夾內有哪些隱藏的檔案或權限就需要輸入 ls -al,但我們也可以透過 alias lm='ls -al',讓 lm 取代 ls -al,這樣我們就可以僅輸入 lm 得到一樣的結果。
  4. script 程式化腳本:它有著物件導向的特性,可以撰寫函數、參數、if-elsewhile 或是 for 迴圈等等。

除此之外,每次輸入的指令很長的時候都要一直按著「←」慢慢的將指令刪除。事實上,你還可以像 Windows 一樣擁有 Home 回到句首、End 回到句尾的功能!

按鍵 功能
Ctrl + u 刪除游標處向前的指令串
Ctrl + k 刪除游標處向後的指令串
Ctrl + a 將游標處移動到整個指令串的最前面
Ctrl + e 將游標處移動到整個指令串的最後面

瞭解這些基本的按鍵操作,在 Kali Linux Terminal 下指令的過程就會變的更加順暢且快速!

⚙️ 開始撰寫腳本

首先我們要知道我們的需求是什麼,把這些內容記錄下來,然後才開始撰寫!

  1. 每 30 秒就幫我用 -sS-sV 掃描
  2. 使用者可以輸入 <ip address> 參數(用的是 IPv4)
  3. 使用者可以輸入 <loop> 迴圈(計算我掃描了幾次)
  4. 每次掃描的時候都顯示第幾圈和 -sS 的結果

那麼我們的腳本就會像這樣:

#!/bin/bash

if [ "$#" -ne 2 ]; then
  echo "Usage: $0 <IPv4> <loop-count>"
  echo "Example: sudo $0 192.168.1.100 5"
  exit 1
fi

TARGET_IP="$1"
LOOP_COUNT="$2"

if ! [[ "$LOOP_COUNT" =~ ^[1-9][0-9]*$ ]]; then
  echo "Error: loop-count must be a positive integer."
  exit 1
fi

SLEEP_SECONDS=30
count=0

echo "Start scanning ${TARGET_IP} for ${LOOP_COUNT} loops (interval ${SLEEP_SECONDS}s)."

while [ $count -lt "$LOOP_COUNT" ]; do
  count=$((count + 1))
  now=$(date +"%Y-%m-%d %H:%M:%S")

  echo "========================================"
  echo "Loop #${count} / ${LOOP_COUNT}  —  ${now}"
  echo "========================================"
  
  nmap -sS -sV -oN "${TARGET_IP}"
  
  if [ $count -ge "$LOOP_COUNT" ]; then
    echo "Completed ${count}/${LOOP_COUNT} loops. Exiting."
    break
  fi

  echo "The next scan will be in ${SLEEP_SECONDS}s ..."
  sleep "${SLEEP_SECONDS}"
done

echo "Complete!"
exit 0

執行的結果就會像這個樣子

https://ithelp.ithome.com.tw/upload/images/20250926/20176048D2gpgOVdBq.png

❓ 基礎觀念補充

從上面的程式碼範例就可以知道,其實很多東西你已經看過或學過了!尤其是有接觸過 python 或 Java 的朋友應該知道我在說什麼哈哈!

  1. echo 相當於 print 把你要輸出的文字列印出來
  2. if-else 的開頭與結尾是用 iffi,然後加上 then 來執行,中斷是使用 break
  3. 條件式寫在中括號 [] 裡面,然後加上 do 來執行
  4. 延遲就跟 Java 一樣使用 sleep
  5. 參數前面會加上錢字號 $,使用參數的時候加上大括號 {}
  6. 字串 String 類型前後要加上雙引號 "

是不是很熟悉呢?這個範本留給大家做參考,你可以試著自己改寫裡面的內容,或是把它 nano 到你的 Kali Linux 桌面,先執行一次看看。說不定你會有更好的想法來優化這個腳本哦!

📄 參考資料

Nmap 官方網站指令說明
鳥哥的 Linux 私房菜
Medium 的文章


上一篇
【Day.10】內網掃描實作
下一篇
【Day.12】基礎 Bash Script 撰寫
系列文
從零開始的 Linux 世界14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言