You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot如何实现网络连通性检测以通过Chaos Monkey健康检查

解决方案

实现思路

  • 全程不访问任何外部公网地址,仅通过读取本机网络配置、检测内部局域网网关连通性判断网络状态,完全符合安全规则
  • Chaos Monkey切断互联网攻击触发时,会自动命中检测规则返回DOWN状态,网络正常时返回UP状态

修改后的代码

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

@Component
public class PersonalHealthIndicator implements HealthIndicator {
   
    @Override
    public Health health() {
        int errorCode = check(); // 执行健康检查逻辑
        if (errorCode != 0) {
            // 检查失败,返回DOWN状态
            return Health.down()
              .withDetail("Error Code", errorCode).build();
        }
        // 检查通过,返回UP状态
        return Health.up().build();
    }
      
    public int check() {
        try {
            // 检测逻辑1:仅读取本地网络接口状态,不发送任何网络包,完全合规
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            boolean hasValidActiveInterface = false;
            while (interfaces.hasMoreElements()) {
                NetworkInterface networkInterface = interfaces.nextElement();
                // 跳过回环接口、虚拟接口、未启动的接口
                if (networkInterface.isLoopback() || networkInterface.isVirtual() || !networkInterface.isUp()) {
                    continue;
                }
                hasValidActiveInterface = true;
                break;
            }
            if (!hasValidActiveInterface) {
                // 无可用活跃网络接口,返回错误码1
                return 1;
            }

            // 检测逻辑2(可选开启,不需要可注释):检测内部默认网关连通性,仅访问内部地址,不涉及外部网站
            // 替换为公司实际的内部网关IP即可
            InetAddress gateway = InetAddress.getByName("192.168.0.1");
            // 超时时间设置为1秒,避免阻塞
            if (!gateway.isReachable(1000)) {
                // 网关不可达,说明网络被切断,返回错误码2
                return 2;
            }

        } catch (Exception e) {
            // 检测过程出现异常,返回错误码-1
            return -1;
        }
        // 所有检查通过,返回0
        return 0;
    }
}

适配说明

  • 若公司流水线对ICMP包有限制,可直接注释掉网关检测的逻辑,仅保留网卡状态检测即可满足需求
  • 网关IP可根据实际部署环境的局域网配置调整,也可替换为公司内部的DNS、镜像仓库等必用基础服务的内网地址,检测准确率更高

内容的提问来源于stack exchange,提问作者Arthur Pendragon De Simone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:00:02