最近开发遇到一个需要网络检测的场景,具体是需要实时(或者近乎实时吧)的监测本级单位与下级单位的网络连通情况并做可视化呈现,所以想到在服务器开一个定时任务,每隔一段时间就去轮询一遍各单位服务器的连通状态存储后供前段呈现,查阅一些资料后总结后台网络检测可选方案有两种

1.使用Java API的InetAddress方式(有坑,不推荐)

自Java 1.5开始,java.net包中就实现了ping的功能。详见InetAddress.isReachable()方法。具体代码如下

public static boolean ping(String ipAddress) throws Exception {int  timeOut =  3000 ;  //超时应该在3钞以上 boolean status = InetAddress.getByName(ipAddress).isReachable(timeOut);// 当返回值是true时,说明host是可用的,false则不可。return status;
}

经过测试,该方法有先天不足,在测试baidu.com服务器时,就出现了从系统能ping通但该方法返回false的情况,百度一番后了解到root用户运行该方法会使用ping命令探测. 如果普通用户不携带特权会探测tcp7端口,如果7端口安全组不开启会与预期结果不一致,所以就造成了上面的情况。所以运行该方法必须以root方式最为保险。

2.直接粗暴调用系统command进行ping检测(通俗易懂稳定,推荐)

ping命令是操作系统中最常见的一个检测网络的命令,所以我们只需要调用系统ping指定地址,通过分析返回情况就可以判断网络是否通联,当然前提是防火墙没有禁ping,具体实现代码

/*** 检测服务器连通性的可靠办法* InetAddress.isReachable 是不靠谱的* ping -c 1 -W 1是1秒钟如果ping 不到就超时* @param hostname* @return*/public static final boolean isServerReachable(String hostname) {try {return 0==Runtime.getRuntime().exec("ping -c 1 -W 3 "+hostname).waitFor();} catch (InterruptedException | IOException e) {e.printStackTrace();return false;}}

这里需要说明的是如果单纯的使用“ping -c 1”来检测,如果服务器不在线就会一直等到超时,可能时间会比较长,不利于做实时检测,所以可以根据实际情况在后面加上“-w”参数来指定超时时间,-w 1就是等待1秒,这样就能满足大部分的应用场景。

3.前端展示

本项目的具体构架是后端sping boot 开启一个定时任务轮询服务器状态,并将结果保存在一个全局表中,用户端可通过调用指定api返回检测结果,前端使用的是leaflet地图框架,通过定时器向后台拉取网络连状况,并解析结果按服务器地理位置,以不同颜色的线段将网络连接状态叠加至地图上,实现可视化呈现。

服务器网络连接状态监测可视化呈现(Java+leaflet)相关推荐

  1. 三菱服务器有电源不显示,三菱plc模块网络连接状态的功能说明

    有关三菱plc模块网络连接状态的功能说明,包括路由器外部IP 地址(地址:28-29),连接异常代码(地址:30),连接成功次数(地址:31).连接失败次数(地址:32),自动切断次数(地址:39)等 ...

  2. 怎样检查Android网络连接状态

    在发送任何HTTP请求前最好检查下网络连接状态,这样可以避免异常.这个教程将会介绍怎样在你的应用中检测网络连接状态. 创建新的项目 1.在Eclipse IDE中创建一个新的项目并把填入必须的信息.  ...

  3. 详解linux netstat输出的网络连接状态信息

    本博文为老男孩linu培训机构早期的培训教案,特分享以供大家学习参考. 全部系列分为五篇文章,本博文为第一篇: 目录:一.生产服务器netstat tcp连接状态................... ...

  4. Android系统信息获取 之六:网络连接状态信息获取

    Android系统可以通过WIFI和移动网络来连接互联网,系统网络连接状态是通过ConnectivityManager 类来获取的.关键代码如下: [java] view plaincopy Conn ...

  5. Linux的系统调用、网络连接状态、磁盘I/O;可疑行为监控/日志收集、SHELL命令执行流程

    http://man7.org/linux/man-pages/man7/capabilities.7.html http://www.cnblogs.com/LittleHann/p/3850653 ...

  6. 安卓实现判断手机网络连接状态是否联网,连接的是移动流量数据还是WIFI连接

    安卓实现判断手机网络连接状态是否联网,连接的是移动流量数据还是WIFI连接 开门见山地说,安卓APP在实际开发应用场景中很容易遇到需要判断网络连接状态的需求,毕竟对于手机APP来说,没有网络的情况并不 ...

  7. Zabbix检测网络连接状态 在线用户与离线用户监控

    根据TCP协议的三次握手,完整的建立一个连接分为四步 1.客户端在本地将本地socket状态改为SYN_SENT,并发送信号量(SYN)给服务端 2.服务端收到信号后将socket状态改为SYN_RC ...

  8. Unity判断PC本地的网络连接状态、获取网络时间

    Unity判断PC本地的网络连接状态 [DllImport("winInet.dll")]//引用外部库 private static extern bool InternetGe ...

  9. VMware虚拟机设置 桥接模式:直接连接物理网络下的复制物理网络连接状态选项有什么作用?(续订ip)

    如图在虚拟机设置里桥接模式:直接连接物理网络下有一个复制物理网络连接状态选项,这个是做什么用的? 官网链接:为现有虚拟机配置桥接模式网络连接 续订IP是指网卡从路由器的DHCP服务器获得IP地址的过程 ...

最新文章

  1. java 多线程处理任务_用Java多线程,将任务分步骤处理
  2. 服务器虚拟化改写存储演进图
  3. JavaWeb总结(九)
  4. Windows 10 LTSC添加UWP支持
  5. Android程序如何实现从网络中获取一张图片
  6. 温州大学《深度学习》课程课件(八、深度卷积神经网络)
  7. linux查看网卡物理编号_关于如何查看多网卡物理机中网卡序号与物理网卡的对应该关系...
  8. Eclipse上Maven环境配置使用
  9. java流写入数据库_成为Java流大师–第4部分:数据库流
  10. 排序与查找 详细分析
  11. Sql Server RowNumber和表变量分页性能优化小计
  12. 2018-2019-2 20175105王鑫浩 实验二《Java面向对象程序设计》实验报告
  13. 重启手机出现机器人加一个叹号_解决win10上不了网出现红叉,网卡驱动异常代码56的问题...
  14. ipython控制台 绘图 后端_如何面试Python后端工程师?
  15. 记录一次ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exis故障【已解决】
  16. Web核心技术-服务器端技术
  17. 面试必问------索引详解
  18. apache tomcat linux 配置,linux下apache+tomcat配置
  19. 地质专业考遥感计算机研究生,我想考中国地质大学的研究生,谁能告诉我是选遥感..._在职考研_帮考网...
  20. 安全龙网络安全攻防实验1.2 全新功能正式上线

热门文章

  1. Eviews用向量自回归模型VAR实证分析公路交通通车里程与经济发展GDP协整关系时间序列数据和脉冲响应可视化...
  2. 安卓Zxing的简单使用-(生成二维码与扫一扫)
  3. zxing android 自定义,ZXing Android Embedded 的使用以及自定义布局 · 小憩之地
  4. TCP协议ESTABLISHED状态处理
  5. 用Qt写一个简单的音乐播放器(五):歌曲播放时间显示
  6. Mac如何使用Windows共享打印机(HP LaserJet 1020)
  7. 阿里云MQ服务报错:No route info of this topic
  8. 游戏本电脑性价比排行2020榜单黑马游戏测评分享
  9. windows下网络流量监控
  10. 宁波银行技术面经-2021.8