Linux 學習筆記

追求高级技术發表於2024-05-28

1. 快速檢測埠連通性

/dev/tcp/<Hostname>(靜態IP地址)/<port>(埠號) 特殊的檔案,允許透過該介面進行TCP網路通訊

例 : 測試 192.168.1.1的22埠是否開啟, /dev/tcp/192.168.1.1/22 沒有輸出結果代表埠是通的,如果有結果輸出代表埠是不通的並未開啟

利用Bash指令碼,還可以同時批次檢測多臺伺服器的多個埠。

首先建立一個CSV檔案(portscan.csv),在檔案中記錄伺服器的IP地址和埠號資訊,一行一個,埠號和IP地址使用空格分隔,如果有多個埠使用逗號進行分割,接著建立一個簡單的Bash指令碼(scan.sh),該指令碼會讀取檔案的每一行並擷取其中的IP地址和埠號的資訊,然後透過for迴圈呼叫/dev/tcp裝置檔案來測試目標的埠連通性,最後列印成功或失敗資訊。為指令碼配置上可執行許可權,然後執行,將CSV檔案作為引數傳遞給指令碼(./scan.sh protscan.csv),幾乎一瞬間就完成了測試,輸出結果有點亂,可以使用管道符配合sort命令來排序一下這樣就可以很清楚的看到結果(./scan.sh portscan.csv | sort -k1),哪些埠是開啟的,哪些埠是關閉的

if [ -n "$1" ] && [ -f "$1" ]; then

while read -r line' do

machine=$(echo "$line"| /bin/cut -d" " -f1)|| exit 100

ports=$(echo "$line"| /bin/cut -d" " -f2)|| exit 101

OLD_IFS=$OLD_IFS

IFS=","

for port in $ports; do

if (echo >/dev/tcp/"$machine"/"$port") >dev/null 2>&1; then

echo "OK: $machine -> $port"

else

echo "ERRORE: $machine -> $port"

fi

done

IFS=$OLD_IFS

done < "$1"

else

echo "ERROR: Invalid or missing data file!"

exit 103

fi

相關文章