From f9a4de8c97c1296de93a3657b2110cfed3b06465 Mon Sep 17 00:00:00 2001 From: gaoyutao Date: Mon, 12 Jan 2026 18:28:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E7=BD=91=E5=8D=A1ip=E6=8E=A2=E6=B5=8B?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BD=91=E5=8D=A1=E5=88=9B=E5=BB=BA=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=AD=97=E6=AE=B5=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/core/vo/NetworkInterfaceInfo.java | 2 ++ .../client/utils/NetworkInterfaceUtil.java | 33 ++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tongran/agent/client/core/vo/NetworkInterfaceInfo.java b/src/main/java/com/tongran/agent/client/core/vo/NetworkInterfaceInfo.java index 5781b79..08d2d81 100644 --- a/src/main/java/com/tongran/agent/client/core/vo/NetworkInterfaceInfo.java +++ b/src/main/java/com/tongran/agent/client/core/vo/NetworkInterfaceInfo.java @@ -27,6 +27,8 @@ public class NetworkInterfaceInfo { String status; // 与外网连通状态 // 如果是子接口,存储父接口名称 private String parentInterface; + /** 网卡创建时间 */ + private Long netCreateTime; // 如果是父接口,存储子接口列表 private List subInterfaces; diff --git a/src/main/java/com/tongran/agent/client/utils/NetworkInterfaceUtil.java b/src/main/java/com/tongran/agent/client/utils/NetworkInterfaceUtil.java index 06288d5..3969343 100644 --- a/src/main/java/com/tongran/agent/client/utils/NetworkInterfaceUtil.java +++ b/src/main/java/com/tongran/agent/client/utils/NetworkInterfaceUtil.java @@ -142,7 +142,6 @@ public class NetworkInterfaceUtil { } } } - // 创建网卡信息对象 NetworkInterfaceInfo info = NetworkInterfaceInfo.builder() .name(name) @@ -187,6 +186,9 @@ public class NetworkInterfaceUtil { } if(info.getIpv4() != null){ info.setStatus(getmacVlanStatus(info.getName())?"1":"0"); + // 获取网卡创建时间戳 + long createTime = getInterfaceCreateTime(name); + info.setNetCreateTime(createTime); } parent.getSubInterfaces().add(info); AssertLog.info(" 添加到父接口 {} 的子接口列表", parentName); @@ -220,6 +222,9 @@ public class NetworkInterfaceUtil { } if(child.getIpv4() != null){ child.setStatus(getmacVlanStatus(child.getName())?"1":"0"); + // 获取网卡创建时间戳 + long createTime = getInterfaceCreateTime(child.getName()); + child.setNetCreateTime(createTime); } parent.getSubInterfaces().add(child); AssertLog.info("子接口 {} 关联到父接口 {}", child.getName(), parentName); @@ -446,6 +451,32 @@ public class NetworkInterfaceUtil { return false; // 保守处理 } } + /** + * 获取网卡创建时间戳(单位:秒) + * 通过 stat 命令获取 /sys/class/net// 目录的创建时间 + * 返回Unix时间戳,失败返回-1 + */ + public static long getInterfaceCreateTime(String interfaceName) { + try { + ProcessBuilder pb = new ProcessBuilder("stat", "-c", "%Y", "/sys/class/net/" + interfaceName); + Process process = pb.start(); + + BufferedReader reader = new BufferedReader( + new InputStreamReader(process.getInputStream())); + String output = reader.readLine(); + reader.close(); + + int exitCode = process.waitFor(); + + if (exitCode == 0 && output != null && !output.trim().isEmpty()) { + return Long.parseLong(output.trim()); + } + return -1; + } catch (Exception e) { + AssertLog.error("获取网卡 {} 创建时间失败: {}", interfaceName, e.getMessage()); + return -1; + } + } /** * 内部类:网卡详情