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