Linux shell編寫端口掃描腳本
需求:
掃描特定主機
掃描特定主機的特定端口
掃描特定網段
掃描特定網段中哪些主機開放了特定的端口
源碼如下:
#/bin/bash #該腳本用於對特定目標主機進行常見端口掃描(加載端口字典)或者指定端口掃描,判斷目標主機開放來哪些端口 #用telnet方式 #作者:雨中落葉 #博客:https://www.cnblogs.com/yuzly/
IP=$1 #獲得IP的前三位 threeIP=$(echo $IP |awk -F. '{print $1"."$2"."$3"."}') #獲得IP的第四位 endIP=$(echo $IP | awk -F. '{print $4}') if [ $1 ] then
if [ $2 ] then #IP的第四位為0表明是一個網段,對整個網段進行特定端口的掃描,發現哪個主機開放特定端口 if [ $endIP -eq 0 ] then
for ((i=128;i<=140;i++)) do (sleep 1;)|telnet $threeIP$i $2 2>&1 |grep "Connected to $threeIP$i">/dev/null
if [ $? -eq 0 ] then
echo "主機$threeIP$i開放$2端口!"
else
echo "主機$threeIP$i的$2端口關閉!"
fi
done
else #IP的第四位不為0,說明是單個IP,對單個IP進行特定端口掃描 (sleep 1;)|telnet $1 $2 2>&1 |grep "Connected to $1">/dev/null
if [ $? -eq 0 ] then
echo "主機$1開放$2端口!"
else
echo "主機$1的$2端口關閉!"
fi
fi
else #腳本只有一個IP參數,根據IP的第四位是否為0來判斷是否為網段,因為沒有端口參數,掃描默認端口 if [ $endIP -eq 0 ] then
for ((i=128;i<=130;i++)) do
for port in $(cat defaultport.txt) do (sleep 1;)|telnet $threeIP$i $port 2>&1 |grep "Connected to $threeIP$i">/dev/null
if [ $? -eq 0 ] then
echo "主機$threeIP$i開放$port端口!"
else
echo "主機$threeIP$i的$port端口關閉!"
fi
done
done
else #腳本只有IP一個參數,沒有端口參數,加載端口字典掃描默認端口 for i in $(cat defaultport.txt) do #與目標主機的特定端口只通信1秒,根據返回的數據來判斷目標是否開放特定端口 (sleep 1;)|telnet $1 $i 2>&1 |grep "Connected to $1">/dev/null
if [ $? -eq 0 ] then
echo "主機$1開放$i端口!"
else
echo "主機$1的$i端口關閉!"
fi
done
fi
fi
else
echo "*******************************************
該腳本的用法示例: $0 192.168.1.1(掃描默認端口) $0 192.168.1.1 portx(掃描指定IP指定端口portx) $0 192.168.1.0(掃描指定網段,掃描默認端口) $0 192.168.1.0 portx(掃描指定網段指定端口portx) ******************************************** "
fi
1.測試,掃描特定主機(沒有給出端口,掃描默認端口文件)
2. 測試,掃描特定主機的特定端口
3. 測試,掃描特定網段(沒給端口參數,掃描默認端口文件) #實驗為例減少測試時間只掃描了很小的網段
4.測試,掃描特定網段中哪些主機開放了特定的端口