diff --git a/go-gost/main.go b/go-gost/main.go index 1cb9887..b84749f 100644 --- a/go-gost/main.go +++ b/go-gost/main.go @@ -136,5 +136,6 @@ func main() { } } -// GOOS=linux GOARCH=amd64 go build +// GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o gost // GOOS=windows GOARCH=amd64 go build -o your_app.exe +// upx --best --lzma gost diff --git a/springboot-backend/src/main/java/com/admin/common/utils/GostUtil.java b/springboot-backend/src/main/java/com/admin/common/utils/GostUtil.java index d324dc6..06be1c0 100644 --- a/springboot-backend/src/main/java/com/admin/common/utils/GostUtil.java +++ b/springboot-backend/src/main/java/com/admin/common/utils/GostUtil.java @@ -1,5 +1,6 @@ package com.admin.common.utils; +import com.admin.common.dto.GostConfigDto; import com.admin.common.dto.GostDto; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -16,10 +17,35 @@ public class GostUtil { public static GostDto SaveConfig(String addr, String secret) { JSONObject data = new JSONObject(); data.put("format", "json"); + + if (!addr.contains("[") && addr.indexOf(':') != addr.lastIndexOf(':')) { + // 这是IPv6地址,找到最后一个冒号(端口分隔符) + int lastColonIndex = addr.lastIndexOf(':'); + String ipPart = addr.substring(0, lastColonIndex); + String portPart = addr.substring(lastColonIndex); + addr = "[" + ipPart + "]" + portPart; + } + String url = "https://" + addr + "/api/config?format=json"; return HttpUtils.post(url, data, secret); } + public static GostConfigDto GetConfig(String addr, String secret) { + JSONObject data = new JSONObject(); + data.put("format", "json"); + + if (!addr.contains("[") && addr.indexOf(':') != addr.lastIndexOf(':')) { + // 这是IPv6地址,找到最后一个冒号(端口分隔符) + int lastColonIndex = addr.lastIndexOf(':'); + String ipPart = addr.substring(0, lastColonIndex); + String portPart = addr.substring(lastColonIndex); + addr = "[" + ipPart + "]" + portPart; + } + + String url = "https://" + addr + "/api/config?format=json"; + return HttpUtils.get(url, secret); + } + /** * 添加限流器配置 diff --git a/springboot-backend/src/main/java/com/admin/common/utils/HttpUtils.java b/springboot-backend/src/main/java/com/admin/common/utils/HttpUtils.java index 042fca7..2b05dc9 100644 --- a/springboot-backend/src/main/java/com/admin/common/utils/HttpUtils.java +++ b/springboot-backend/src/main/java/com/admin/common/utils/HttpUtils.java @@ -1,5 +1,6 @@ package com.admin.common.utils; +import com.admin.common.dto.GostConfigDto; import com.admin.common.dto.GostDto; import com.admin.common.task.SaveConfigAsync; import com.admin.config.RestTemplateConfig; @@ -145,6 +146,32 @@ public class HttpUtils implements ApplicationContextAware { return restTemplate; } + + @SneakyThrows + public static GostConfigDto get(String url, String secret) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + String auth = secret + ":" + secret; + String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8)); + headers.set("Authorization", "Basic " + encodedAuth); + RestTemplate restTemplate = createRestTemplateWithTimeout(); + HttpEntity entity = new HttpEntity<>("", headers); + try { + ResponseEntity response = restTemplate.exchange( + url, + HttpMethod.GET, + entity, + GostConfigDto.class + ); + return response.getBody(); + } catch (Exception e) { + e.printStackTrace(); + GostConfigDto gostDto = new GostConfigDto(); + return gostDto; + } + } + @SneakyThrows public static GostDto post(String url, Object requestBody, String secret) { HttpHeaders headers = new HttpHeaders(); diff --git a/springboot-backend/src/main/java/com/admin/service/impl/ForwardServiceImpl.java b/springboot-backend/src/main/java/com/admin/service/impl/ForwardServiceImpl.java index ddd00df..5bd51a4 100644 --- a/springboot-backend/src/main/java/com/admin/service/impl/ForwardServiceImpl.java +++ b/springboot-backend/src/main/java/com/admin/service/impl/ForwardServiceImpl.java @@ -99,6 +99,7 @@ public class ForwardServiceImpl extends ServiceImpl impl // 6. 调用Gost服务创建转发 R gostResult = createGostServices(forward, tunnel, permissionResult.getLimiter()); + if (gostResult.getCode() != 0) { this.removeById(forward.getId()); return gostResult; @@ -538,13 +539,11 @@ public class ForwardServiceImpl extends ServiceImpl impl if (tunnel.getType() == TUNNEL_TYPE_TUNNEL_FORWARD) { R chainResult = createChainService(inNode, serviceName, tunnel.getOutIp(), forward.getOutPort(), tunnel.getProtocol()); if (chainResult.getCode() != 0) { - updateForwardStatusToError(forward); return chainResult; } R remoteResult = createRemoteService(tunnel.getOutNodeId().intValue(), serviceName, forward, tunnel.getProtocol()); if (remoteResult.getCode() != 0) { - updateForwardStatusToError(forward); return remoteResult; } @@ -553,7 +552,6 @@ public class ForwardServiceImpl extends ServiceImpl impl // 创建主服务 R serviceResult = createMainService(inNode, serviceName, forward, limiter, tunnel.getType()); if (serviceResult.getCode() != 0) { - updateForwardStatusToError(forward); return serviceResult; } return R.ok(); diff --git a/springboot-backend/src/main/java/com/admin/service/impl/SpeedLimitServiceImpl.java b/springboot-backend/src/main/java/com/admin/service/impl/SpeedLimitServiceImpl.java index 2ba8ce5..b489f7b 100644 --- a/springboot-backend/src/main/java/com/admin/service/impl/SpeedLimitServiceImpl.java +++ b/springboot-backend/src/main/java/com/admin/service/impl/SpeedLimitServiceImpl.java @@ -187,14 +187,12 @@ public class SpeedLimitServiceImpl extends ServiceImpl
- -