脚本名:monitor_port.pl
作用:扫描特定端口是否正常
脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#!/usr/bin/env perl
(
$sec
,
$min
,
$hour
,
$mday
,
$mon
,
$year
) = (
localtime
)[0..5];
(
$sec
,
$min
,
$hour
,
$mday
,
$mon
,
$year
) = (
sprintf
(
"%02d"
,
$sec
),
sprintf
(
"%02d"
,
$min
),
sprintf
(
"%02d"
,
$hour
),
sprintf
(
"%02d"
,
$mday
),
sprintf
(
"%02d"
,
$mon
+ 1),
$year
+ 1900
);
$date
=
"$year-$mon-$mday $hour:$min:$sec"
;
##########################################################
open
(FH,
"/opt/monitor/port.list"
) ||
die
;
while
(
defined
(
$port_tn
=<FH>)) {
(
$host_ip
,
$mod_n
,
$port_t
,
$port_n
)=
split
(/\t/,
$port_tn
);
chomp
$host_ip
;
chomp
$mod_n
;
chomp
$port_t
;
chomp
$port_n
;
ch_result();
}
####################################################
sub
ch_result {
open
LOG,
">>/opt/monitor/port_status.log"
;
select
LOG;
if
(
$port_t
eq
'tcp'
){
`/usr/bin/nc -z -w2
$host_ip
$port_n
`;
$flag
= `echo $?`;
}
else
{
`/usr/bin/nc -u -z -w2
$host_ip
$port_n
`;
$flag
= `echo $?`;
}
###########################
if
(
$flag
!= 0){
print
"$date $host_ip $mod_n $port_t $port_n is closed!\n"
;
}
close
(LOG);
}
|
文件1、port.list 定义要扫描的端口内容,
eg:
1
2
|
172.16.2.2 httpd tcp 80
172.16.2.2 tomcat tcp 8080
|
文件2、port_status.log 记录端口失败信息
eg:
1
2
|
2014-11-25 20:30:01 172.16.2.2 httpd tcp 80 is closed!
2014-11-25 20:30:01 172.16.2.2 tomcat tcp 8080 is closed!
|
使用方法:
只要将此脚本添加到crontab即可!
1
|
*
/5
* * * *
cd
/opt/monitor
; .
/monitor_port
.pl >
/dev/null
2>&1
|
本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1582720