概述
由于一些情况需要扫描指定IP网段及指定端口,故写出基于NMAP的SHELL脚本。
#!/bin/bash
#NMAP扫描指定的网段及端口是否存活
#By: admin@lolicp.com
#设置IP网段
Ip_Domain='192.144.238.1-254'
#IP地址的网段
Ip_Domain_Part=`echo $Ip_Domain |awk -F'.' '{print $1"."$2"."$3"."}'`
#IP地址从哪开始
Ip_Domain_Start=`echo $Ip_Domain |awk -F'-' '{print $1}'|awk -F'.' '{print $4}'`
#IP地址从哪结束
Ip_Domain_Stop=`echo $Ip_Domain |awk -F'-' '{print $2}'`
#指定端口列表分隔符为","
Ip_Prot_Domain='22,80,443'
#生成数组
Ip_Prot_List=(${Ip_Prot_Domain//,/ })
#对IP地址进行循环
for Ip_Domain_Num in `seq "${Ip_Domain_Start}" "${Ip_Domain_Stop}"`
do
#将IP地址网段和主机位合并
Ip_Adderss_Code="${Ip_Domain_Part}${Ip_Domain_Num}"
#判断IP地址是否为0或者255,反之则跳过
if [ "${Ip_Domain_Num}" -eq 0 -o "${Ip_Domain_Num}" -eq 255 ];then
#echo "当前 ${Ip_Adderss_Code} 地址不可用!"
continue
else
#循环端口列表
for Prot_Sum in ${Ip_Prot_List[@]}
do
#扫描指定IP及端口循环
Ip_Domain_Status=`nmap "${Ip_Adderss_Code}" -p ${Prot_Sum} | awk "/^${Prot_Sum}/ {print \\$2}"`
#判断值是否为空,如为空则可能代表IP地址不存在,具体需进行实际测试查看!
if [ -z "${Ip_Domain_Status}" ];then
echo "当前主机可能不存在!"
else
#输出结果
echo "${Ip_Adderss_Code} Prot ${Prot_Sum} Status: ${Ip_Domain_Status}"
fi
done
fi
done