nmap端口扫描及邮件告警脚本

来源:互联网 发布:白城广逸网络具体位置 编辑:程序博客网 时间:2024/06/11 21:13

一、背景需求

由于最近需要编写定时扫描端口脚本。所以选择了强悍的扫描工具--nmap。所以在测试完成脚本后分享在本博客。

在本文中使用的就是扫描主机是否存活。端口是是否增加及时邮件告知管理员,对扫描结果使用diff进行比对,若出

现增加端口,邮件告知管理员,谨防入侵。

二、NMAP简介

Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,

并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用

以评估网络系统安全。正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱

用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来

搜集目标电脑的网络设定,从而计划攻击的方法。

Nmap 常被跟评估系统漏洞软件Nessus 混为一谈。Nmap 以隐秘的手法,避开闯入检测系统的监视,并尽

可能不影响目标系统的日常操作。

三、NMAP功能

其基本功能有三个,一是探测一组主机是否在线;其次是扫描 主机端口,嗅探所提供的网络服务;还可以推

断主机所用的操作系统 。Nmap可用于扫描仅有两个节点的LAN,直至500个节点以上的网络。Nmap 还允

许用户定制扫描技巧。通常,一个简单的使用ICMP协议的ping操作可以满足一般需求;也可以深入探测UDP

或者TCP端口,直至主机所使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析

操作。

四、NMAP:shell脚本编写

为了使脚本具有通用性。所以在前面编写脚本,写的的比较冗长,同时,是以同一天时间进行比对。


脚本中添加了使用该脚本的用户,你懂的。


本文可以自动创建所有文件及文件夹,请忽略部分输出,那是为了方便测试。请谅解。

#!/bin/bash#author:aizhen#mail:997822785@qq.com ###设crond 0:01 执行一次$0###设crond 23:50 执行一次$0user=$(whoami)send_user=997822785@qq.comdate=$(date "+%F")subnet="192.168.40."diff_dir="/diff"nmap_dir="/nmap"nmap_file=$datenmap_file1=$date+1###down机告警使用send_mail(){echo -e "$1\noperator:$user" | mail -s "$2" $send_user}###diff告警使用send_mail_diff(){echo -e "$1\noperatoe:$user" | mail -s "$2" $send_user}###每次扫描端口时,先测试主机是否存活,如果主机down机,马上给管理员发送邮件host_alive(){for i in {128..130};docount=$(nmap -sP $subnet$i | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' | wc -l)if [ $count -eq 0 ];thensend_mail "$subnet$i is down" "hosts down"fidone}###每次先测试主机是否存活,扫描端口并写入文档,文档用于diffscan_first(){host_alivefor a in {128..130};docd $nmap_dirif [ $? -ne 0 ];thenmkdir -p $nmap_dircd $nmap_dirfi cd $nmap_fileif [ $? -ne 0 ];thenmkdir -p $nmap_filecd $nmap_fileficat $subnet$aif [ $? -ne 0 ];thentouch  $subnet$afifirst_count=$(nmap -sS  -p- $subnet$a | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' | wc -l)if [ $first_count -ne 0 ];thennmap -sS  -p- $subnet$a | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' >> $subnet$afifirst_count1=$(nmap -sS  -p- $subnet$a | awk '/^[0-9]/{print $1}' | wc -l)if [ $first_count1 -ne 0 ];thennmap -sS  -p- $subnet$a | awk '/^[0-9]/{print $1}' >>  $subnet$afidone }###依旧每次扫描端口前,测试主机是否存活,第二次扫描并diffscan_second(){host_alivefor b in {128..130};docd $nmap_dirif [ $? -ne 0 ];thenscan_firstbreakficd $nmap_fileif [ $? -ne 0 ];thenscan_firstbreakficd $nmap_dir/$nmap_file1if [ $? -ne 0 ];thenmkdir -p $nmap_dir/$nmap_file1cd $nmap_dir/$nmap_file1ficat $subnet$bif [ $? -ne 0 ];thentouch $subnet$bfisecond_count=$(nmap -sS  -p- $subnet$b | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' | wc -l)                if [ $second_count -ne 0 ];then                        nmap -sS  -p- $subnet$b | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' >> $subnet$b                fi        second_count1=$(nmap -sS  -p- $subnet$b | awk '/^[0-9]/{print $1}' | wc -l)                if [ $second_count1 -ne 0 ];then                        nmap -sS  -p- $subnet$b | awk '/^[0-9]/{print $1}' >>  $subnet$b                fidonescan_diff}###用于对比两个文件,不同就告警scan_diff(){cd $diff_dirif [ $? -ne 0 ];thenmkdir -p $diffficd $nmap_dirif [ $? -ne 0 ];thenbreakfiif [ ! -d $nmap_file -o ! -d $nmap_file1 ];thenbreakfifor f in {128..130};dodiff $nmap_dir/$nmap_file/$subnet$f $nmap_dir/$nmap_file1/$subnet$fif [ $? -eq 1 ];thenecho $subnet$f >> $diff_dir/$datediff $nmap_dir/$nmap_file/$subnet$f $nmap_dir/$nmap_file1/$subnet$f >> $diff_dir/$datefidoneif [ ! -f $diff_dir/$date ];thensend_mail_diff "no problem" "no port change"else send_mail_diff "some port had changed\n$(cat $diff_dir/$date)" "port changed"fi}$1

测试结果如下:

测试主机出现宕机

端口扫描没有出现变化

端口扫描出现变化,增加了22端口


五、总结

筛选IP
nmap -sS  -p- 192.168.40.128 | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' >> nmap.txt


筛选开放端口
nmap -sS  -p- 192.168.40.128 | awk '/^[0-9]/{print $1}' >>  nmap.txt


脚本经本人测试过,可以使用。强调一下,为方便大家使用测试,我没将部分的显示丢到后台,敬请谅解。


本文为博主原创博文,如需要转载本文,请添加原文出处。谢谢!

原创粉丝点击