一、需求说明
有时候系统故障我们需要验证局域网内的主机是否开放某个端口;又或者互联网报到某软件漏洞涉及到某个端口,我们需要批量检查局域网中哪些主机开放了此端口;又或者我们需要检查指定列表主机都开放了哪些端口?我们可以通过脚本来完成这些工作,便捷、高效。
二、脚本内容
#!/bin/bash#script name: scan_port.sh#author: wuhs#description: Scan whether the host port is open#参数定义HOST=localhostPORTS="22 25 80 443 8080 1521 3306"HostList=hosts.txtcurdir=`cd -P $(dirname $0); pwd`echo -e "脚本使用说明:直接输入IP和端口,扫描单个主机特定端口;无参数执行则扫描指定主机列表的指定端口!"if [ $1 ];thenHOST=$1if [ $2 ];then#IP和端口都有输入时直接扫描PORT=$2if [ echo &>/dev/null > /dev/tcp/$HOST/$PORT ]; thenecho -e "\e[32m $HOST 端口$PORT 状态为:open \e[0m"elseecho "$HOST 端口$PORT 状态为:close"fielse#只输入IP参数,则提示需要输入待扫描端口read -p "未输入端口,请输入你需要扫描的端口:" PORTif [ echo &>/dev/null > /dev/tcp/$HOST/$PORT ]; thenecho -e "\e[32m $HOST 端口$PORT 状态为:open \e[0m"elseecho -e "$HOST 端口$PORT 状态为:close"fifielseif [ -s $HostList ];then #检查待扫描列表文件是否存在并不为空cd $curdir echo "未输入参数执行,扫描hosts.txt文件中列表主机"echo -e "1、扫描指定端口\n2、扫描默认常见端口列表\n3、扫描指定端口范围\n4、退出:" read -p "你的选择是:" optcase $opt in1)#扫描列表主机的指定端口read -p "请输入你需要扫描的端口:" PORTwhile read linedoif [ echo &>/dev/null > /dev/tcp/$line/$PORT ]; thenecho -e "\e[32m $line 端口$PORT 状态为:open \e[0m"elseecho -e "$line 端口$PORT 状态为:close"fidone < hosts.txt;;2)#扫描列表主机的常见应用端口echo "现在扫描常见应用端口: $PORTS"while read linedofor PORT in $PORTS; doif [ echo &>/dev/null > /dev/tcp/$line/$PORT ]; thenecho -e "\e[32m $line 端口$PORT 状态为:open \e[0m"elseecho -e "$line 端口$PORT 状态为:close"fidonedone < hosts.txt ;;3)#扫描列表主机的指定端口范围read -p "请输入你需要扫描的起始端口号:" FPORTread -p "请输入你需要扫描的结束端口号:" LPORTwhile read linedoPORT=$FPORTwhile ((PORT<=$LPORT))doif [ echo &>/dev/null > /dev/tcp/$line/$PORT ]; thenecho -e "\e[32m $line 端口$PORT 状态为:open \e[0m"elseecho -e "$line 端口$PORT 状态为:close"filet "PORT++"donedone < hosts.txt;;4)exit;;*)echo "请根据选择输入1,2,3,4,其他输入无效!";;esacelse#待扫描主机列表为空则退出echo "待扫描主机列表为空"exitfifi
三、使用示例
1、带IP和端口参数执行
2、带IP参数执行
3、扫描主机列表的指定端口
4、扫描主机列表的常见应用端口
5、扫描主机列表的端口范围
6、扫描列表为空时
7、检查域名主机端口是否开放
如果觉得《Shell脚本之TCP端口扫描器》对你有帮助,请点赞、收藏,并留下你的观点哦!