循环检查多个IP或端口,发现掉线用信使报警

  • 思路
  • 信使服务
  • 批处理1-Ping命令
  • 批处理2-nmap命令(端口监控)
  • 批处理3-nmap命令(端口监控-进阶)

思路

类似批量ping,循环ping IP的批处理或者小软件,CSDN里面已经有很多,但它们要么是写日志,要么就是本机播放音乐进行报警。
在实际工作中,我们没办法第一时间知道自己关注的设备是否发生了掉线,就没办法做到更快的反应。而我们也不可能随时盯着做报警的电脑,所以本机报警的方式局限性比较大。
于是我就想要一种能够在24小时开机的服务器上做一个扫描的进程,然后远程报警给多个远端工作人员的方式。Linux可以自己配置smtp邮件发送,但是Windows端就没有这么方便。
最后我就想到了Windows的信使服务。

信使服务

信使服务在XP系统中是用net send来工作的,但从Win7开始改成了msg命令,后面的批处理中我以msg命令为例。如果是老版系统请参照修改。

信使服务在win7之后的名称是Terminal Server。出于安全考虑,这个服务默认是不接收来自其他计算机的信使信息的。要打开接收信息的开关,需要进入注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server
找到值 AllowRemoteRPC ,将它的数值改为 1 即可。
发送信使信息的电脑不用打开这个开关,但是接收信息的一定要打开。
网上有些资料说信使服务需要接收端对发送端的身份进行确认才能正常接收,所以要建立用户凭据。因为我是在AD环境中的,所有的用户都能相互验证身份,所以没有这个情况。工作组中是否需要凭据我并没有验证过。

批处理1-Ping命令

我首先想到的还是直接ping对应的IP,在不考虑端口的情况下,能ping通就表示设备在线。
如果需要监控的是不同节点的交换机、网关、VPN隧道或专线对端等,用ping命令比较简单。但是考虑到偶尔会有数据掉包的情况,所以同一个IP至少ping3次,3次全部不通则认为该设备确实是掉线了。

下面是批处理全文:

echo off
@mode con lines=13 cols=80
title ★★网络循环监控中 请勿关闭★★
color 17
:go
for /f %%i in (ip.txt) do (
set i=%%i
ping %%i -w 100 -n 3
if errorlevel 1 goto error
)
echo .
echo 指定IP全部在线,10秒后再次轮询
choice /t 10 /d y /n >nul
goto go
:error
for /f %%c in (it.txt) do (
call msg /time:1800 /server:%%c * %i%掉线ping不通,请尽快排查
)
echo .
echo %i%掉线ping不通,已经发送通知,5分钟后再次开始轮询
echo %date% %time% %i% 掉线未ping通>>NetworkLog.txt
choice /t 300 /d y /n >nul
goto go

由于需要监控的IP不是一个连续的网段,且随时可能发生改变,所以是写在一个外挂txt文本《ip.txt》中的,批处理程序每次进入循环时都会单独读取一次,所以可以在不关闭批处理程序的情况下随时对监控IP池进行添加或删除。
另外,需要被信使通知到的人员(计算机)也可能会发生变化,所以被通知的人我也是写在另一个外挂txt文本《it.txt》里面的。
一旦IP列表中的某一个出现了掉线,那么监控就会触发报警并且忽略掉后面的所有IP,直到掉线的这个IP重新上线或者从ip.txt列表中移除。所以ip.txt的写法就一定要由近到远(相对于搭载批处理的服务器),否则一个很远的IP发生报警,实则可能是最近的网络设备掉线,就会导致判断失误,延误救援的时机。
ip.txt和it.txt都是一行一个地址,可以是计算机名,也可以是对应的IP地址。当然文件名也可以换个不一样的,但是外挂文件和批处理中的名字要对应起来。
另外,为了更好的管理,批处理中还增加了数据记录,一旦有掉线的情况发生,系统会在NetworkLog.txt中记录下日期和时间,以及掉线的IP地址或计算机名。

批处理2-nmap命令(端口监控)

nmap则可以对端口进行监控,这样不仅可以知道设备是否在线,还可以知道它上面的某服务或软件是否正常。但它不是windows自带命令,需要先到nmap.org官网进行下载。
下载并安装完成后,安装程序会添加一个用户环境变量,如果当前的电脑或者服务器的用户名比较多,建议把这个变量修改、添加为系统变量。环境变量需要重新启动电脑才能生效,之后就可以在命令行窗口和批处理中直接使用nmap命令了。
nmap可以通过下面的命令行方式来查看指定设备的指定端口运行状态:

nmap IP -p 端口

如果nmap返回open,则说明端口正常,那么我们可以用findstr来检测返回的内容中是否有open,如果没有,则报警。
报警方式还是采取上一个批处理的信使方式,但nmap不能像ping命令一样设置探测次数,所以可能会有误报。
由于nmap的检测极为快速,我们可以把轮询间隔提高一些。
例如,我们要监控一批设备的80端口是否存活,完整的批处理文本如下:

echo off
@mode con lines=13 cols=80
title ★★网络循环监控中 请勿关闭★★
color 17
:go
for /f %%i in (ip.txt) do (
set i=%%i
nmap %%i -p 80|findstr /I /c:"open"
if errorlevel 1 goto error
)
echo .
echo 指定IP的80端口全部在线,20秒后再次轮询
choice /t 20 /d y /n >nul
goto go
:error
for /f %%c in (it.txt) do (
call msg /time:1800 /server:%%c * 检测到%i%的80端口异常,请尽快排查
)
echo .
echo %i%的80端口异常,已经发送通知,5分钟后再次开始轮询
echo %date% %time% %i% 80端口异常>>NetworkLog.txt
choice /t 300 /d y /n >nul
goto go

批处理3-nmap命令(端口监控-进阶)

第二个批处理适用于监控所有IP的同一个端口。
如果想要监控不同的端口,我们的文本内容和批处理也需要稍加修改。
首先我们建立一个portmonitor.txt。文本内容以“IP:端口”的方式写入,每行一个,注意冒号一定要是英文,例如:

192.168.0.1:80
192.168.5.2:443
10.0.2.3:8080

然后我们在批处理2的基础上稍加修改,引入端口参数即可:

echo off
@mode con lines=13 cols=80
title ★★网络循环监控中 请勿关闭★★
color 17
:go
for /f "tokens=1,2 delims=:" %%i in (portmonitor.txt) do (
set i=%%i
set p=%%j
nmap %%i -p %%j|findstr /I /c:"open"
if errorlevel 1 goto error
)
echo .
echo 指定的端口全部在线,20秒后再次轮询
choice /t 20 /d y /n >nul
goto go
:error
for /f %%c in (it.txt) do (
call msg /time:1800 /server:%%c * 检测到%i%的%p%端口异常,请尽快排查
)
echo .
echo %i%的%p%端口异常,已经发送通知,5分钟后再次开始轮询
echo %date% %time% %i%:%p%异常>>NetworkLog.txt
choice /t 300 /d y /n >nul
goto go

希望本文能带给大家一些参考。有需要的也可以在评论区留言给我。谢谢。

循环检查多个IP或端口,发现掉线用信使报警相关推荐

  1. 15、Linux:IP及端口检查命令

    本机IP:10.129.49.102,连接测试主机:10.129.49.104 一.查询IP 1.查询当前服务器的 IP 信息 ifconfig ---或使用: ip addr 请注意,ifconfi ...

  2. 花生壳-连接失败-请检查内网主机IP和端口

    很多人初玩花生壳内网穿透的时候,应该会遇到像我一样的问题.所以,记录一下,也使得大家少走弯路.这里我创建的是TCP通信协议应用. 1. 出现的问题是:请检查内网主机IP和端口.其实解决的方法很简单,只 ...

  3. 开发随笔——花生壳错误“您的局域网服务器连接失败,请检查局域网IP与端口“

    错误原因 1.新建端口的时候 局域网IP和端口有误 2.用同一账户绑定了多台设备,设备同时在线 例如:windows安装了花生壳服务端(此时账户绑定了本机) linux安装了花生壳服务端(账户通过SN ...

  4. TCP/IP协议端口大全

    TCP/IP协议端口大全 应用层网关服务     Internet 连接共享 (ICS)/Internet 连接防火墙 (ICF) 服务的这个子组件对允许网络协议通过防火墙并在 Internet 连接 ...

  5. linux 扫描开放的端口命令,在Linux系统中检查(扫描)开放端口的方法

    无论是对网络连接问题进行故障排除还是配置防火墙,首先要检查的是在系统上实际打开的端口,本文介绍几种查找系统外部打开端口的方法,即在Linux系统中检查(扫描)开放端口. 什么是开放端口 侦听端口是应用 ...

  6. 微软邮箱服务器和端口,发送邮件的服务器的ip和端口

    发送邮件的服务器的ip和端口 内容精选 换一换 浏览器发送邮件:在使用浏览器登录邮箱时直接使用HTTP协议,其端口号默认为80,邮件服务器之间还是使用邮件发送协议:SMTP协议.通过浏览器发送邮件,则 ...

  7. 信息收集域名、IP、端口服务、指纹识别相关信息

    信息收集域名.IP.端口服务.指纹识别.Googlehacking.目录信息.Githack相关信息 域名相关的信息 域名是什么 域名的分类 国际域名 国别域名 新顶级域名 域名联系人信息 whois ...

  8. SQL:安装多个实例,修改实例端口号,和IP加端口号连接实例

    原文:SQL:安装多个实例,修改实例端口号,和IP加端口号连接实例 sql server 安装第一个实例,默认实例的端口是1433,   一个库中如果有多个实例, 从第二个实例开始的端口是动态端口,需 ...

  9. Centos中基于IP,域名,端口的虚拟主机搭建图文教程

    首先,检查是否已安装httpd软件包,也就是所谓的Apache rpm –qa httpd 没有回显则代表没有安装,如果安装后想删除用yum remove   安装yum install httpd ...

最新文章

  1. Javascript中函数提升和变量提升
  2. 吴麒pdf 自动控制原理下_自动控制原理 第五讲 频域分析(下)
  3. Ext.menu.Menu菜单栏
  4. boost::statechart模块无效图表测试
  5. linux中的mysql使用_Linux下安装和使用MySQL(二)
  6. 【xxl-job】轻松实现分布式定时任务demo实例
  7. ios App开发的基本流程
  8. [iOS]自定义view使用xib
  9. java 消息队列_消息队列-RabbitMQ在JAVA中的应用(1)
  10. 传输预编码matlab,无线通信-预编码-MATLAB代码合集-毕设专用.zip
  11. python 电话簿排序
  12. Java面试题中高级,java简历技术栈怎么写
  13. xtrabackup全量备份与全量恢复
  14. 电子计算机上面cutup,cutup(cut up用法总结)
  15. SCIEI 英文PAPER投稿经验【转】
  16. 项目管理——时间、成本、范围的三重约束
  17. 差分隐私若干基本知识点介绍(一)
  18. 【弄nèng - SpringCloud】应用篇 —— 整合Zipkin【Finchley版】
  19. win10系统 oracle11g的安装流程
  20. LeetCode-1104. Path In Zigzag Labelled Binary Tree

热门文章

  1. 没有996的当代年轻人,配过怎样的生活 1
  2. python安装要装oracle,python安装oracle数据库
  3. ABAP ASSIGN 的用法
  4. 阶的估计I 无穷小量与强函数1 基本概念 无穷小量与强函数的运算法则
  5. 基于计算机毕业设计的asp.net论文选题
  6. 同城跑腿APP开发需具备哪些功能?
  7. @[springboot初学,附北京尚学堂教程网址
  8. selenium三种等待时间之隐式等待
  9. 通过 JDK 源码学习灵活应用设计模式(上)
  10. 【云原生Docker篇】Docker的容器管理操作