nmap端口扫描及邮件告警脚本
2017-10-22 09:47
411 查看
一、背景需求
由于最近需要编写定时扫描端口脚本。所以选择了强悍的扫描工具--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脚本编写
为了使脚本具有通用性。所以在前面编写脚本,写的的比较冗长,同时,是以同一天时间进行比对。
脚本中添加了使用该脚本的用户,你懂的。
本文可以自动创建所有文件及文件夹,请忽略部分输出,那是为了方便测试。请谅解。
测试结果如下:
测试主机出现宕机
端口扫描没有出现变化
端口扫描出现变化,增加了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
脚本经本人测试过,可以使用。强调一下,为方便大家使用测试,我没将部分的显示丢到后台,敬请谅解。
本文为博主原创博文,如需要转载本文,请添加原文出处。谢谢!
由于最近需要编写定时扫描端口脚本。所以选择了强悍的扫描工具--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 执行一次$0 user=$(whoami) send_user=997822785@qq.com date=$(date "+%F") subnet="192.168.40." diff_dir="/diff" nmap_dir="/nmap" nmap_file=$date nmap_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};do count=$(nmap -sP $subnet$i | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' | wc -l) if [ $count -eq 0 ];then send_mail "$subnet$i is down" "hosts down" fi done } ###每次先测试主机是否存活,扫描端口并写入文档,文档用于diff scan_first(){ host_alive for a in {128..130};do cd $nmap_dir if [ $? -ne 0 ];then mkdir -p $nmap_dir cd $nmap_dir fi cd $nmap_file if [ $? -ne 0 ];then mkdir -p $nmap_file cd $nmap_file fi cat $subnet$a if [ $? -ne 0 ];then touch $subnet$a fi first_count=$(nmap -sS -p- $subnet$a | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' | wc -l) if [ $first_count -ne 0 ];then nmap -sS -p- $subnet$a | awk '/^Nmap scan/{print $6}' | sed -e 's/[()]//g' >> $subnet$a fi first_count1=$(nmap -sS -p- $subnet$a | awk '/^[0-9]/{print $1}' | wc -l) if [ $first_count1 -ne 0 ];then nmap -sS -p- $subnet$a | awk '/^[0-9]/{print $1}' >> $subnet$a fi done } ###依旧每次扫描端口前,测试主机是否存活,第二次扫描并diff scan_second(){ host_alive for b in {128..130};do cd $nmap_dir if [ $? -ne 0 ];then scan_first break fi cd $nmap_file if [ $? -ne 0 ];then scan_first break fi cd $nmap_dir/$nmap_file1 if [ $? -ne 0 ];then mkdir -p $nmap_dir/$nmap_file1 cd $nmap_dir/$nmap_file1 fi cat $subnet$b if [ $? -ne 0 ];then touch $subnet$b fi second_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 fi done scan_diff } ###用于对比两个文件,不同就告警 scan_diff(){ cd $diff_dir if [ $? -ne 0 ];then mkdir -p $diff fi cd $nmap_dir if [ $? -ne 0 ];then break fi if [ ! -d $nmap_file -o ! -d $nmap_file1 ];then break fi for f in {128..130};do diff $nmap_dir/$nmap_file/$subnet$f $nmap_dir/$nmap_file1/$subnet$f if [ $? -eq 1 ];then echo $subnet$f >> $diff_dir/$date diff $nmap_dir/$nmap_file/$subnet$f $nmap_dir/$nmap_file1/$subnet$f >> $diff_dir/$date fi done if [ ! -f $diff_dir/$date ];then send_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
脚本经本人测试过,可以使用。强调一下,为方便大家使用测试,我没将部分的显示丢到后台,敬请谅解。
本文为博主原创博文,如需要转载本文,请添加原文出处。谢谢!
相关文章推荐
- nmap的扫描端口脚本
- shell脚本结合iptables防端口扫描的实现
- 自动扫描局域网并且发现指定端口开放的主机ip的shell脚本
- Zabbix3.2邮件告警python脚本
- NMAP之script脚本扫描总结
- 端口扫描程序nmap使用手册
- Python 脚本学习笔记(五)集中式病毒扫描,端口扫描以及分段数据库操作
- nmap 端口扫描
- PowerShell脚本开发之对指定IP进行端口扫描
- 端口扫描程序nmap使用手册
- Nmap(扫描端口工具)windows版下载(附教程) v6.40汉化中文版
- 主机邮件告警监控脚本
- Python 第三方模块pythonnmap来实现高效的端口扫描
- shell脚本使用iptables防端口扫描的一段代码
- zabbix邮件告警之 通过shell脚本发送告警
- nmap入门之端口说明和扫描顺序
- 网络连接端扫描软件Nmap的使用---网络扫描(端口、主机)
- shell脚本结合iptables防端口扫描的实现
- 《shell脚本系统监控-------邮件告警》
- 端口扫描程序nmap使用手册