今天要來跟大家分享的是程式語言 「Bash」!
為什麼會突然要介紹程式語言呢?因為當你每個操作都要自己手動的時候肯定會覺得很麻煩!想像一下,如果有一個腳本可以每天幫你掃描鄰近的裝置,它的連接阜有哪些,然後幫你存檔放在 Windows 的桌面。等你每天下班或放學回家,直接看桌面的檔案有哪些內容,不就省略自己掃描的麻煩事嗎?
所以我們要結合這幾天練習的東西,製作一個簡單的腳本,讓你的 Kali Linux 在 24 小時都可以幫你工作!
Bash(Bourne Again Shell) 是 Unix Shell 的一種,發明的人是來自美國的 Brian J. Fox。當我們要跟電腦溝通的時候會經過「核心(Kernel)」和「硬體(Hardware)」。我們知道電腦就是一堆 0 跟 1 所組成的,那要如何能夠跟電腦溝通?就需要一個指令或是語言來組織你的「句子」。
而 Shell 這個東西究竟是什麼?它擁有很多不一樣的版本,例如:Bourne Shell(sh)、C SHell、K SHell 等等。而它的定位就像應用程式,讓使用者可以跟作業系統溝通,作業系統再跟硬體溝通,就如同雞蛋最外層的殼一樣,所以又稱為「殼程式」。
如果有在寫程式的朋友一定不陌生,不管是在 Windows、MacOS、Linux 都可以看到 Shell,它擁有幾個好處和優點:
Tab
快速補全指令或檔案↑
、↓
紀錄曾經使用的指令alias
設定指令的別名:假設我要查看資料夾內有哪些隱藏的檔案或權限就需要輸入 ls -al
,但我們也可以透過 alias lm='ls -al'
,讓 lm
取代 ls -al
,這樣我們就可以僅輸入 lm
得到一樣的結果。script
程式化腳本:它有著物件導向的特性,可以撰寫函數、參數、if-else
、while
或是 for
迴圈等等。除此之外,每次輸入的指令很長的時候都要一直按著「←」慢慢的將指令刪除。事實上,你還可以像 Windows 一樣擁有 Home
回到句首、End
回到句尾的功能!
按鍵 | 功能 |
---|---|
Ctrl + u | 刪除游標處向前的指令串 |
Ctrl + k | 刪除游標處向後的指令串 |
Ctrl + a | 將游標處移動到整個指令串的最前面 |
Ctrl + e | 將游標處移動到整個指令串的最後面 |
瞭解這些基本的按鍵操作,在 Kali Linux Terminal 下指令的過程就會變的更加順暢且快速!
首先我們要知道我們的需求是什麼,把這些內容記錄下來,然後才開始撰寫!
-sS
、-sV
掃描<ip address>
參數(用的是 IPv4)<loop>
迴圈(計算我掃描了幾次)-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
執行的結果就會像這個樣子
從上面的程式碼範例就可以知道,其實很多東西你已經看過或學過了!尤其是有接觸過 python 或 Java 的朋友應該知道我在說什麼哈哈!
echo
相當於 print
把你要輸出的文字列印出來if-else
的開頭與結尾是用 if
、fi
,然後加上 then
來執行,中斷是使用 break
[
、]
裡面,然後加上 do
來執行sleep
$
,使用參數的時候加上大括號 {
、}
String
類型前後要加上雙引號 "
是不是很熟悉呢?這個範本留給大家做參考,你可以試著自己改寫裡面的內容,或是把它 nano
到你的 Kali Linux 桌面,先執行一次看看。說不定你會有更好的想法來優化這個腳本哦!
Nmap 官方網站指令說明
鳥哥的 Linux 私房菜
Medium 的文章