nmap+nagios
来源:互联网 发布:免费相册制作软件下载 编辑:程序博客网 时间:2024/05/19 04:25
Replacing Ping with Nmap for Nagios
作为一个管理员,有时候我们需要周围的网络情况。一个简单的例子,当网络设备规避了icmp的回应,我们用一般的ping就很难探测到设备是否活着,向nagios这样就很难做得到。所以下面我们来介绍一个例子,解决上面出现的情况,用namp可以结合nagios对网络扫描和监控是我们的目的。先来熟悉namp基本语法:
例子:nmap -sP 192.168.1.6
输出以下内容:
Starting Nmap 5.30BETA1 ( http://nmap.org ) at 2010-06-28 14:13 EDTNmap scan report for argos (192.168.1.6)Host is up (0.000073s latency).Nmap done: 1 IP address (1 host up) scanned in 0.00 seconds
或者下面的内容:
nmap -sP 192.168.1.200Starting Nmap 5.30BETA1 ( http://nmap.org ) at 2010-06-28 14:15 EDTNote: Host seems down. If it is really up, but blocking our ping / probes, try -PnNmap done: 1 IP address (0 hosts up) scanned in 3.01 seconds
上面是两种情况下的输出,第一种是主控ijup,第二种是主机down的时候。
现在我们来看下面简单的脚本:
#!/bin/sh/usr/local/bin/nmap -sP $1 | grep "Host seems down" if [ "$?" -eq 0 ]; thenecho "NMAP PING: CRITICAL"exit 2fiecho "NMAP PING: OK"exit 0
这个脚步看起来有点不好,因为它没有考虑unknown的情况,下面是考虑 3种情况的脚本:
#!/bin/shNMAP="/usr/local/bin/nmap -sP"TMP=/var/tmp/nmap_ping.$$CHECK="Nmap Ping"$NMAP $1 > $TMP grep "Host seems down" $TMPif [ "$?" -eq 0 ]; thenrm -f $TMPecho "$CHECK: CRITICAL"exit 2figrep "Host is up" $TMPif [ "$?" -eq 0 ]; thenrm -f $TMPecho "$CHECK: Ok"exit 0firm -f $TMPecho "$CHECK: UNKNOWN"exit 3
现在脚本考虑了所有情况在内,但是还是有两个问题在内。第一:我们重复判断临时文件何时删除。第二:如果namp不运行呢?从理论上讲,会生成一个未知的,最好是在等到它运行完之前就判断。仅仅做一个例行的删除操作是没有意义的,更好的办法是返回一个错误等级和错误信息:
results_exit(){retval=$1msg=$2rm -f $TMPecho "$CHECK ${msg}"return $retval}
上面定义了一个退出函数,方便控制:
#!/bin/sh NMAP="/usr/local/bin/nmap -sP" TMP=/var/tmp/nmap_ping.$$ CHECK="Nmap Ping" results_exit() { retval=$1 msg=$2 rm -f $TMP echo "$CHECK ${msg}" return $retval } $NMAP $1 > $TMP || results_exit 255 "Could not execute $NMAP" grep "Host seems down" $TMP if [ "$?" -eq 0 ]; thenresults_exit 2 "CRITICAL" fi grep "Host is up" $TMP if [ "$?" -eq 0 ]; thenresults_exit 0 "Ok" fi results_exit 3 "Unknown"
现在,我们希望替换掉nagios的ping操作,下面是清晰的简单的脚本:
#!/bin/sh NMAP="/usr/local/bin/nmap -sP" TMP=/var/tmp/nmap_ping.$$ CHECK="Nmap Ping" results_exit() { rm -f $TMP echo "$CHECK: ${2}" return $1 } $NMAP $1 > $TMP || results_exit 255 "Could not execute $NMAP" grep "Host seems down" $TMP[ $? -eq 0 ] && results_exit 2 "CRITICAL" grep "Host is up" $TMP[ $? -eq 0 ] && results_exit 0 "Ok" results_exit 3 "Unknown"
用这个脚本可以替换掉nagios的ping操作,下面是一个例子,把脚本放到相应的路径,然后再command.cfg里定义命令模式:
# 'check-host-alive' 这个是nagios本来的ping定义
define command{ command_name check-host-alive command_line $USER1$/check_ping -H $HOSTADDRESS$/ -w 3000.0,80% -c 5000.0,100% -p 5 }
现在用nmap的替换它:
# 'check0host-alive' command definitiondefine command{ command_name check-host-alive command_line /usr/local/nagios/local/nmap_ping / $HOSTADDRESS$ }# 'check-host-alive' command definition#define command{# command_name check-host-alive# command_line $USER1$/check_ping -H / # $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5# }
当然这个还可以进一步提高。假设我们的脚步放在/usr/local/nagios/local 这个目录下,我们可以用一个宏$USERxx$来替换它,就像宏$USER$能替换/usr/local/nagios/etc/resource.cfg一样。对于xx现在的nagios版本可以支持到数字32.比如,这里我们用数字6来替换xx,可以这样做,在resource.cfg文件里加上下面两行:
# Set $USER6$ to our local script directory$USER6$=/usr/local/nagios/local
下一步修改command.cfg文件:
# 'check-host-alive' command definitiondefine command{ command_name check-host-alive command_line $USER6$/nmap_ping $HOSTADDRESS$ }
nagios本身就是一个杰出的监控工具,但是有时事实超过了它所能控制的范围,有些地方我们可能会有所规避,所以选择nmap作为它网络监控的助手,会是不错的选择。
- nmap+nagios
- Nmap
- nmap
- nmap
- NMap
- nmap
- Nmap
- nmap
- Nmap
- nmap
- nmap
- Nmap
- nmap
- nmap
- nmap
- nmap
- Nmap
- nmap
- COM字符串转换大全
- 77种互联网盈利创新模式(10)
- 聊一聊引擎的开发
- Windows资源(三)字符串资源
- 判断js数组包是否包含某个元素
- nmap+nagios
- java数据类型问题
- PL/SQL 11g R2 —— 函数
- Spring 2.5 jar 所有开发包及完整文档及项目开发实例
- 关于窗口移动的整理笔记
- [转] 解析oracle的ROWNUM -- 作者: chen_liang
- 一步一步学RMAN之实战RMAN备份
- C#调用Windows API实现自动登录
- Oracle sqlldr笔记