多网IP探测优化
This commit is contained in:
@@ -4,6 +4,7 @@ import cn.hutool.json.JSONObject;
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.tongran.agent.client.core.config.GlobalConfig;
|
import com.tongran.agent.client.core.config.GlobalConfig;
|
||||||
import com.tongran.agent.client.core.vo.NetworkInterfaceInfo;
|
import com.tongran.agent.client.core.vo.NetworkInterfaceInfo;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.snmp4j.smi.OID;
|
import org.snmp4j.smi.OID;
|
||||||
import oshi.hardware.NetworkIF;
|
import oshi.hardware.NetworkIF;
|
||||||
|
|
||||||
@@ -262,14 +263,13 @@ public class AgentUtil {
|
|||||||
public static List<NetworkInterfaceInfo> collectNetworkInfo() throws Exception {
|
public static List<NetworkInterfaceInfo> collectNetworkInfo() throws Exception {
|
||||||
List<NetworkInterfaceInfo> result = new ArrayList<>();
|
List<NetworkInterfaceInfo> result = new ArrayList<>();
|
||||||
// String publicIp = getPublicIp(); // 获取公网 IP(全局出口)
|
// String publicIp = getPublicIp(); // 获取公网 IP(全局出口)
|
||||||
String ipInfo = PublicIpFetcher.getPublicIp();
|
// String ipInfo = PublicIpFetcher.getPublicIp();
|
||||||
// System.out.println("完整信息: " + ipInfo);
|
// String publicIp = PublicIpFetcher.extractIp(ipInfo);
|
||||||
String publicIp = PublicIpFetcher.extractIp(ipInfo);
|
// if (publicIp != null) {
|
||||||
if (publicIp != null) {
|
// System.out.println("公网 IP: " + publicIp);
|
||||||
System.out.println("公网 IP: " + publicIp);
|
// } else {
|
||||||
} else {
|
// System.out.println("未能提取 IP 地址");
|
||||||
System.out.println("未能提取 IP 地址");
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
|
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
|
||||||
|
|
||||||
@@ -286,15 +286,35 @@ public class AgentUtil {
|
|||||||
// 检查是否“已连接”(物理链路状态)
|
// 检查是否“已连接”(物理链路状态)
|
||||||
if (!isInterfaceConnected(name)) continue;
|
if (!isInterfaceConnected(name)) continue;
|
||||||
|
|
||||||
|
String ipv4 = getIPv4Address(ni);
|
||||||
// 检查IP4信息
|
// 检查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()
|
NetworkInterfaceInfo info = NetworkInterfaceInfo.builder()
|
||||||
.name(name)
|
.name(name)
|
||||||
.type("Ethernet")
|
.type("Ethernet")
|
||||||
.mac(getMacAddress(ni))
|
.mac(getMacAddress(ni))
|
||||||
.ipv4(getIPv4Address(ni))
|
.ipv4(ipv4)
|
||||||
.gateway(getGatewayAddress()) // 网关通常是默认路由,全局一致
|
.gateway(gateway) // 网关通常是默认路由,全局一致
|
||||||
.publicIp(publicIp)
|
.publicIp(publicIp)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@@ -336,6 +356,36 @@ public class AgentUtil {
|
|||||||
return result;
|
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 类型网卡(基于常见命名)
|
* 判断是否为 Ethernet 类型网卡(基于常见命名)
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user