最近碰到一个项目,前端用apache htttpd进行发布(80端口),通过双机负载均衡转发到后端的两个tomcat进行处理(8081和8082端口),现在需要随时监控这三个端口的情况,一旦down掉需要能够立即告警处理。批量的系统监控比较好的是用nagios软件来实现,这样小项目专门装一个nagios软件,有点繁琐了。在网上查了一些资料,总结实验了一下,可以用简单的nc命令来实现。

一、nc命令检测端口的用法# nc  -v  -w 10 %IP%   -z  %PORT%

-v  显示指令执行过程。

-w     设置等待连线的时间。

-u  表示使用UDP协议

-z  使用0输入/输出模式,只在扫描通信端口时使用。

例1:扫描指定的8080端口

# nc -v -w 10 -z 192.168.0.100 8080

Connection to 192.168.0.100 8080 port [tcp/http] succeeded!

例2:扫描20到25的端口范围,并详细输出。

# nc -v -w 2 -z 192.168.0.100 20-25

nc: connect to 192.168.0.100 port 20 (tcp) failed: Connection refused

nc: connect to 192.168.0.100 port 21 (tcp) failed: Connection refused

Connection to 192.168.0.100 22 port [tcp/ssh] succeeded!

nc: connect to 192.168.0.100 port 23 (tcp) failed: Connection refused

nc: connect to 192.168.0.100  port 24 (tcp) failed: Connection refused

nc: connect to 192.168.0.100 port 25 (tcp) failed: Connection refused

例3:扫描1到65535的端口范围,只输出打开的端口(去掉-v参数即可)

# nc -w 1 -z 192.168.0.100 1-65535

Connection to 192.168.0.100 22 port [tcp/ssh] succeeded!

Connection to 192.168.0.100 80 port [tcp/http] succeeded!

Connection to 192.168.0.100 2121 port [tcp/scientia-ssdb] succeeded!

Connection to 192.168.0.100 4004 port [tcp/pxc-roid] succeeded!

Connection to 192.168.0.100 8081 port [tcp/tproxy] succeeded!

Connection to 192.168.0.100 11211 port [tcp/*] succeeded!

二、批量检测服务器指定端口开放情况:1、假如我们要监控一堆指定的IP和端口,可新建一个文件(第1列服务器IP,第2列要监控的端口)。

# vim /scripts/ip-ports.txt

192.168.0.100 80

192.168.0.100 8081

192.168.0.101 8082

192.168.1.100 21

2、我们可以写这样一个脚本来批量检测端口是否开放:

# vim /scripts/ncports.sh

#!/bin/bash

#检测服务器端口是否开放,成功会返回0值显示ok,失败会返回1值显示fail

cat /scripts/ip-ports.txt | while read line

do

nc -w 10 -z $line > /dev/null 2>&1

if [ $? -eq 0 ]

then

echo $line:ok

else

echo $line:fail

fi

done

3、执行脚本查看运行结果如下:

# chmod a+x  /scripts/ncports.sh

# /scripts/ncports.sh

192.168.0.100 80:ok

192.168.0.100 8081:ok

192.168.0.101 8082:ok

192.168.1.100 21:fail

三、端口不通时设置告警:

1、 邮件告警:1) 先安装linux下面的邮件发送程序mutt(参见我另一篇文章《Linux下面如何用mutt命令发送邮件》

2) 修改上面的ncports.sh检测脚本,在显示失败fail的时候增加一行:

……………………

echo $line :fail

echo "服务器 $line 端口不通,请尽快处理!" | mutt -s "【机房监控】服务器$line端口不通" test@139.com

……………………

3) 如果上面的接收邮箱设置为移动139邮箱,并开启接收邮件短信告知,即可实现“短信告警”的功能。

2、 windows消息弹窗告警:(1) 先打开接收消息弹窗windows客户机的“Messenger”服务,设置为“启动”

(2) 利用smbclient命令来发送消息,net脚本文件如下:

# vim /scripts/net.sh

#!/bin/bash

#/scripts/net.sh

case "$1" in

send)

echo "$3"|smbclient -I "$2" -M `nmblookup -A "$2"|sed -e '1d' -e '3,/*/d'|cut -f2|cut -d' ' -f1`

*)

echo "Usage:net send "

exit 1

esac

# chmod a+x /scripts/net.sh

(3) 发送消息弹窗命令测试:(发送给192.168.1.83这台win xp机子,发送内容不支持中文)

# /scripts/net.sh  send  192.168.1.83     "hello,nihao"

3、端口不通时发送邮件并消息弹窗告警的脚本如下:

# vim /scripts/ncports.sh

#!/bin/bash

#检测服务器端口是否开放,成功会返回0值,打不开会返回1值

cat /scripts/ip-ports.txt | while read line

do

nc -w 10 -z $line > /dev/null 2>&1

if [ $? -eq 0 ]

then

echo $line:ok

else

echo $line:fail

echo "服务器 $line 端口不通,请尽快处理!" | mutt -s "【机房监控】服务器$line端口不通"  test@18.com

/scripts/net.sh send 192.168.1.83 "The $line fail"

fi

done

4、加入任务计划每2分钟执行一次

# crontab -e

*/2 * * * *  /scripts/ncports.sh  > /dev/null 2>&1

# service crond restart

nc 探测端口_Linux利用nc命令监控服务器端口的方法相关推荐

  1. Win10系统Ping端口及利用telnet命令Ping 端口

    Win10系统Ping端口及利用telnet命令Ping 端口 启用 telnet 客户端组件为 Ping 端口做准备 在搜索栏搜索 "启用或关闭Windows功能": 在打开的对 ...

  2. Win7系统Ping端口及利用telnet命令Ping 端口

    启用 telnet 客户端组件为 Ping 端口做准备 1 在桌面左下角点击"开始菜单",打开控制面板,如下图所示: 2 在控制面板界面中,将查看方式修改为类别,再点击" ...

  3. mysql命令行查看端口占用_linux下常用命令查看端口占用

    在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询 netstat命令各个参数说明如下: -t : 指明显示TCP端 ...

  4. 命令查看mysql端口映射_【转载】烂泥:如何利用telnet命令检测端口映射是否成功...

    本文由男装世家提供友情赞助,首发于 为了测试在路由器上端口映射设置没有问题,远程可以通过telnet命令来验证端口是否映射成功,即在dos命令行下输入telnet +路由器WAN口IP +对应的端口号 ...

  5. lsof查看进程占用文件_Linux 利用lsof命令查找已经删除的文件来释放磁盘空间

    测试环境一台服务器/ 根目录空间使用率达到94%,但是通过du -sh * 发现实际空间没没用用到那么多,初步怀疑,之前删除的文件,有运行中的进程一直占用,导致空间没有释放,如图通过du -sh * ...

  6. redhat 添加ssh端口_Linux修改SSH远程登录端口 --服务器安全篇

    1.修改SSH远程登录端口为5000 输入 vi/etc/ssh/sshd_config Port 5000                        #把'#Port 22'修改为'Port 5 ...

  7. xshell查看mysql端口_linux中如何查看某个端口是否被占用

    之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下: 1.netstat  -anp  |grep   端口号 如下,我以3306为例,netstat  -anp  |grep   ...

  8. centos mysql 端口_Linux CentOS Mysql修改默认端口

    为了提高服务器的安全性,本节课主要讲的是Linux下如何修改Mysql端口.支持Linux环境下大部分系统的修改,如Centos和Ubuntu等. 演示环境: Linux CentOS 6.3 X32 ...

  9. java telnet端口_Java 实现 telnet命令 验证主机端口的连通性

    Java 实现 telnet命令 验证主机端口的连通性 1.Telnet 命令 Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式.它为用户提供了在本地计 ...

最新文章

  1. WPF及Silverlight中将DataGrid数据导出
  2. POJ2533解题报告
  3. java之上三角矩阵_7.2.4 编程题《判断是否为上三角矩阵》
  4. Java Daemon线程
  5. mysql binaryVInstall
  6. 排列与组合的Java递归实现 (参考)
  7. idea for mac 控制台 mvn command not found
  8. OutOfMemoryError:无法创建新的本机线程–问题神秘化
  9. 2.1.3码元、波特、速率、带宽
  10. php golang 加密 对接,把php的加密算法转为go语言
  11. 机器学习模型导出为PMML的方法
  12. Android Train—notification通知
  13. 安卓学习笔记44:开源框架okhttp3入门
  14. Dart入门—基础类型与正则
  15. 苹果iOS 11.3.1正式发布,修复iPhone 8触屏bug
  16. IS-IS邻接关系建立过程
  17. 自学 6 个月 Java 找到了一份 15K 的工作,师弟的方式值得推荐给大家
  18. ue4 unreal 使用 Download Image 下载图片 下载多张图片 批量下载 类似untiy协程
  19. 一文看尽Stata绘图
  20. [TI TDA4 J721E]开发板网络调试功能及开机自动配置网络

热门文章

  1. 什么样的商品详情页才能打动消费者
  2. CSS学习笔记(详细)- 基础
  3. thinkjs能在浏览器html文件,think
  4. 在IE临时文件夹中找文件
  5. linux虚拟机能ping通windows主机,windows主机ping不通linux虚拟机
  6. 电脑wifi连接受限
  7. 与“老大”一起谈软件行业
  8. SQL集合函数中case when then 使用技巧
  9. Android SDK怎么救砖,z怎么样用android sdk救砖
  10. 记录一次acer swift3安装deepin的过程