多网IP探测优化

This commit is contained in:
qiminbao
2025-10-31 17:18:30 +08:00
parent b433c8480e
commit 8175f939f8
@@ -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<NetworkInterfaceInfo> collectNetworkInfo() throws Exception {
List<NetworkInterfaceInfo> 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<NetworkInterface> 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 类型网卡(基于常见命名)
*/