diff --git a/pom.xml b/pom.xml index 199b61f..52fc765 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ scalable-network-storage-site scalable-network-storage-site - 17 + 21 @@ -65,7 +65,7 @@ cn.hutool hutool-all - 5.8.20 + 5.8.26 diff --git a/src/main/java/com/lion/snss/service/CommunicateToMainService.java b/src/main/java/com/lion/snss/service/CommunicateToMainService.java index 99ed963..5f50205 100644 --- a/src/main/java/com/lion/snss/service/CommunicateToMainService.java +++ b/src/main/java/com/lion/snss/service/CommunicateToMainService.java @@ -1205,7 +1205,7 @@ public class CommunicateToMainService { if(storagePath.startsWith(file.getParentFile().getPath())) fileNode.setPath(""); else - fileNode.setPath(file.getParentFile().getPath().replace(storagePath, "")); + fileNode.setPath(file.getParentFile().getPath().replace(storagePath, "") + "/"); response.success(objectMapper.valueToTree(fileNode)); } case ShareFileQueryMessage.QUERY_SHARE_FILES -> { diff --git a/src/main/java/com/lion/snss/util/IoUtil.java b/src/main/java/com/lion/snss/util/IoUtil.java index 67ee092..fe16998 100644 --- a/src/main/java/com/lion/snss/util/IoUtil.java +++ b/src/main/java/com/lion/snss/util/IoUtil.java @@ -19,14 +19,15 @@ import oshi.hardware.HWDiskStore; import oshi.hardware.NetworkIF; import oshi.software.os.OperatingSystem; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; +import java.io.*; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; @Data @Slf4j @@ -50,12 +51,14 @@ public class IoUtil { static long write; static long writeNow; + static ScheduledExecutorService thread; + static { init(); } public static void init(){ - ScheduledExecutorService thread = Executors.newScheduledThreadPool(1); + thread = Executors.newScheduledThreadPool(1); List networkIFs = OshiUtil.getNetworkIFs(); cpuInfo = OshiUtil.getCpuInfo(); globalMemory = OshiUtil.getMemory(); @@ -106,7 +109,16 @@ public class IoUtil { public static PairMessage generatePairMessage(){ PairMessage pairMessage = new PairMessage(); - pairMessage.setIp(networkIF.getIPv4addr()[0].split("/")[0]); + String ip = networkIF.getIPv4addr()[0].split("/")[0]; + String privateIPPattern = "(^10\\.)|(^172\\.1[6-9]\\.)|(^172\\.2[0-9]\\.)|(^172\\.3[0-1]\\.)|(^192\\.168\\.)"; + if(Pattern.compile(privateIPPattern).matcher(ip).find()) + try { + ip = getPublicIP(); + }catch (IOException | URISyntaxException e){ + log.info("当前机器网卡为内网ip且无法获取公网ip,程序退出"); + Runtime.getRuntime().exit(1); + } + pairMessage.setIp(ip); pairMessage.setHostname(NetUtil.getLocalHostName()); OperatingSystem os = OshiUtil.getOs(); @@ -120,6 +132,25 @@ public class IoUtil { return pairMessage; } + public static String getPublicIP() throws IOException, URISyntaxException { + // 通过访问一个提供公网IP查询的服务,例如 httpbin.org + URL url = new URI("https://httpbin.org/ip").toURL(); + BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); + + // 读取返回的 JSON 数据 + StringBuilder response = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + + // 从返回的 JSON 数据中提取公网IP + String json = response.toString(); + int startIndex = json.indexOf("\"origin\":") + 10; + int endIndex = json.indexOf("\"", startIndex + 1); + return json.substring(startIndex + 1, endIndex); + } + public static StatusMessage generateStatusMessage(int id, String path){ StatusMessage statusMessage = new StatusMessage(); statusMessage.setId(id); diff --git a/src/main/resources/snss.db b/src/main/resources/snss.db index 6b9f44f..10915f3 100644 Binary files a/src/main/resources/snss.db and b/src/main/resources/snss.db differ