批量端口扫描
作用:批量端口扫描,可根据扫描主机的配置调整后台扫描进程数量(手动执行后根据统计的执行时间调整脚本中关于进程数量的参数),通过定时任务作为简单的服务监控(可修改脚本添加其他报警功能,例如邮件等)
实现:使用nc指令扫描端口, 使用管道特性控制后台扫描进程数量
不足:仅仅对扫描端口状态为down的信息做记录,并没有其他报警操作
使用:需要提供包含被扫描主机的ip地址、协议和端口号的配置文件(格式见演示或代码专区注释)
需要一个日志文件记录端口down状态信息。
配置和日志文件在脚本中定义,默认为:ports_list.cfg 和 port_down.log
演示:
每扫描一次会在日志文件中做记录
代码专区:
#!/bin/bash#LY#------------------#Copyright2016.4.14,LingYi(lydygly@163.com)QQ:1519952564#"scanports"#theconf_file,likethis:#------------------------------------------------------#IPPROTOCOL(tcp/upd)PORTS(1,2,3)|#|#192.168.2.250tcp21,22,23|#------------------------------------------------------#配置文件,根据情况修改conf_file=ports_list.cfgport_down_log=port_down.log#后台扫描进程数量,根据服务器配置调整number_of_background_processes=1000host_count=0port_count=0time_start=0time_end=0all_cfg_infor=$(grep-E-v'(^*#|^$)'$conf_file)#checkncif!rpm-qnc&>/dev/null;thenyuminstall-ync&>/dev/null[[$?-ne0]]&&exit1fi#打印信息functiontimestamp(){echo-n"$(date+"%Y-%m-%d%H:%M:%S")"}#扫描端口函数#host{tcp|udp}portfunctionscan_host_port(){localthis_protocolif[[$2=='udp']];thenthis_protocol='-u'elsethis_protocol=''fiif!nc-z-w1$this_protocol$1$3;then#其他报警等操作可在此出添加echo"$(timestamp)Connectionto$1$3port[$2/$3]failed!"|tee-a$port_down_logfi}sum_line_of_all_cfg_infor=$(echo"$all_cfg_infor"|wc-l)#管道操作fifo_file=$(date+%s)ifmkfifo$fifo_file;thenexec46<>$fifo_filerm-fr$fifo_fileelseecho"Createfifofilefailed!"exit2fi#每个echo对应一个管道输入,多少次输入就只能最大对应多少次输出,以此来达到控制后台进程数量的目的#关于shell多进程,参考:http://lingyi.blog.51cto.com/2837715/1575730time_start=$(date+%s)for((count_n=1;count_n<=number_of_background_processes;count_n++))doecho>&46doneecho-----------------------------$(timestamp)--------------------------->>$port_down_logfor((line_num=1;line_num<=sum_line_of_all_cfg_infor;line_num++))doline_infor=$(echo"$all_cfg_infor"|sed-n"${line_num}p")line_ip=$(echo$line_infor|awk'{print$1}')line_protocol=$(echo$line_infor|awk'{print$2}')#readline_ipline_protocol<<(echo$line_infor|awk'{print$1,$2}')forthis_portin$(echo$line_infor|awk'{print$3}'|tr',''')do#每做一个端口扫描动作读取一次管道read-u46#将扫描进程放入后台,以实现进程并发{scan_host_port$line_ip$line_protocol$this_port#操作完成之后,对管道做一次写入操作echo>&46}&letport_count++donelethost_count++donewait#释放exec46>&-exec46<&-time_end=$(date+%s)echoHosts:$host_countPorts:$port_countTimes:$((time_end-time_start))s|tee-a$port_down_log
代码下载链接
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。