概述

由于一些情况需要扫描指定IP网段及指定端口,故写出基于NMAP的SHELL脚本。

#!/bin/bash
#NMAP扫描指定的网段及端口是否存活
#By: admin@ym68.cc
#设置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

该文章采用「CC 协议」,转载必须注明作者和本文链接.
分类: Shell