From 8175f939f8f01659e461a643dde41dfc07973173 Mon Sep 17 00:00:00 2001 From: qiminbao Date: Fri, 31 Oct 2025 17:18:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E7=BD=91IP=E6=8E=A2=E6=B5=8B=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tongran/agent/client/utils/AgentUtil.java | 72 ++++++++++++++++--- 1 file changed, 61 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/tongran/agent/client/utils/AgentUtil.java b/src/main/java/com/tongran/agent/client/utils/AgentUtil.java index 868ce40..25b4032 100644 --- a/src/main/java/com/tongran/agent/client/utils/AgentUtil.java +++ b/src/main/java/com/tongran/agent/client/utils/AgentUtil.java @@ -4,6 +4,7 @@ import cn.hutool.json.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.tongran.agent.client.core.config.GlobalConfig; import com.tongran.agent.client.core.vo.NetworkInterfaceInfo; +import org.apache.commons.lang3.StringUtils; import org.snmp4j.smi.OID; import oshi.hardware.NetworkIF; @@ -262,14 +263,13 @@ public class AgentUtil { public static List collectNetworkInfo() throws Exception { List result = new ArrayList<>(); // String publicIp = getPublicIp(); // 获取公网 IP(全局出口) - String ipInfo = PublicIpFetcher.getPublicIp(); -// System.out.println("完整信息: " + ipInfo); - String publicIp = PublicIpFetcher.extractIp(ipInfo); - if (publicIp != null) { - System.out.println("公网 IP: " + publicIp); - } else { - System.out.println("未能提取 IP 地址"); - } +// String ipInfo = PublicIpFetcher.getPublicIp(); +// String publicIp = PublicIpFetcher.extractIp(ipInfo); +// if (publicIp != null) { +// System.out.println("公网 IP: " + publicIp); +// } else { +// System.out.println("未能提取 IP 地址"); +// } Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); @@ -286,15 +286,35 @@ public class AgentUtil { // 检查是否“已连接”(物理链路状态) if (!isInterfaceConnected(name)) continue; + String ipv4 = getIPv4Address(ni); // 检查IP4信息 - if (getIPv4Address(ni).equals("N/A")) continue; + if (ipv4.equals("N/A")) continue; + + String gateway = getGatewayAddress(); + // 检查IP4信息 + if (gateway.equals("N/A")) continue; + + // 添加临时路由 + addTempRoute(ipv4, name, gateway); + String ipInfo = PublicIpFetcher.getPublicIp(); + String publicIp = PublicIpFetcher.extractIp(ipInfo); + if (publicIp != null) { + System.out.println("公网 IP: " + publicIp); + } else { + System.out.println("未能提取 IP 地址"); + } + if (StringUtils.isBlank(publicIp)) continue; + + // 删除临时路由 + delTempRoute(ipv4, name, gateway); + NetworkInterfaceInfo info = NetworkInterfaceInfo.builder() .name(name) .type("Ethernet") .mac(getMacAddress(ni)) - .ipv4(getIPv4Address(ni)) - .gateway(getGatewayAddress()) // 网关通常是默认路由,全局一致 + .ipv4(ipv4) + .gateway(gateway) // 网关通常是默认路由,全局一致 .publicIp(publicIp) .build(); @@ -336,6 +356,36 @@ public class AgentUtil { return result; } + /** + * 添加临时路由 + */ + private static boolean addTempRoute(String ipv4, String name, String gateway) { + String prefix = "32"; + AssertLog.info("添加临时路由,ipv4:{}",ipv4); + boolean flag = NetworkUtil.addRoute(ipv4,prefix,gateway,name); + if(flag){ + AssertLog.info("添加临时路由成功,ipv4:{}",ipv4); + }else{ + AssertLog.info("添加临时路由成功失败,ipv4:{}",ipv4); + } + return flag; + } + + /** + * 删除临时路由 + */ + private static boolean delTempRoute(String ipv4, String name, String gateway) { + String prefix = "32"; + AssertLog.info("删除临时路由,ipv4:{}",ipv4); + boolean flag = NetworkUtil.addRoute(ipv4,prefix,gateway,name); + if(flag){ + AssertLog.info("删除临时路由成功,ipv4:{}",ipv4); + }else{ + AssertLog.info("删除临时路由成功失败,ipv4:{}",ipv4); + } + return flag; + } + /** * 判断是否为 Ethernet 类型网卡(基于常见命名) */