summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhangshuai <[email protected]>2024-08-15 15:09:43 +0800
committerzhangshuai <[email protected]>2024-08-15 15:09:43 +0800
commit634166c4b3f8aeefa90bb0d3ec08f65b7e63ca4f (patch)
treee75ba506a996faa62ced4031e4412df41bc7c833
parentecb57f6c6c5e1ad579bf42c4f8176ed6027fea61 (diff)
feat: ASW-38 webshark 访问接口开发
-rw-r--r--src/main/java/net/geedge/asw/module/feign/FeignClientConfiguration.java15
-rw-r--r--src/main/java/net/geedge/asw/module/feign/client/WebSharkClient.java17
-rw-r--r--src/main/java/net/geedge/asw/module/runner/controller/PcapController.java38
3 files changed, 67 insertions, 3 deletions
diff --git a/src/main/java/net/geedge/asw/module/feign/FeignClientConfiguration.java b/src/main/java/net/geedge/asw/module/feign/FeignClientConfiguration.java
index d04bb0f..a6ab90f 100644
--- a/src/main/java/net/geedge/asw/module/feign/FeignClientConfiguration.java
+++ b/src/main/java/net/geedge/asw/module/feign/FeignClientConfiguration.java
@@ -6,6 +6,7 @@ import feign.Feign;
import feign.form.FormEncoder;
import net.geedge.asw.module.feign.client.GeoipClient;
import net.geedge.asw.module.feign.client.KibanaClient;
+import net.geedge.asw.module.feign.client.WebSharkClient;
import net.geedge.asw.module.feign.client.ZeekClient;
import net.geedge.asw.module.feign.support.Fastjson2Decoder;
import net.geedge.asw.module.feign.support.Fastjson2Encoder;
@@ -28,6 +29,9 @@ public class FeignClientConfiguration {
@Value("${kibana.url:127.0.0.1:5601}")
private String kibanaUrl;
+ @Value("${webShark.url:127.0.0.1:8085}")
+ private String websharkurl;
+
@Bean("zeekClient")
public ZeekClient zeekClient() {
String url = UrlBuilder.ofHttp(zeekUrl).toString();
@@ -61,4 +65,15 @@ public class FeignClientConfiguration {
.target(KibanaClient.class, url);
}
+ @Bean("webSharkClient")
+ public WebSharkClient webSharkClient() {
+ String url = UrlBuilder.ofHttp(websharkurl).toString();
+ log.info("[webSharkClient] [url: {}]", url);
+ return Feign.builder()
+ .encoder(new FormEncoder())
+ //.decoder(new Fastjson2Decoder())
+ .client(new Http2Client())
+ .target(WebSharkClient.class, url);
+ }
+
} \ No newline at end of file
diff --git a/src/main/java/net/geedge/asw/module/feign/client/WebSharkClient.java b/src/main/java/net/geedge/asw/module/feign/client/WebSharkClient.java
new file mode 100644
index 0000000..602b687
--- /dev/null
+++ b/src/main/java/net/geedge/asw/module/feign/client/WebSharkClient.java
@@ -0,0 +1,17 @@
+package net.geedge.asw.module.feign.client;
+
+import feign.Headers;
+import feign.Param;
+import feign.RequestLine;
+import org.springframework.cloud.openfeign.FeignClient;
+
+import java.io.File;
+import java.util.Map;
+
+@FeignClient(name = "webSharkClient")
+public interface WebSharkClient {
+
+ @RequestLine("POST /webshark/upload")
+ @Headers("Content-Type: multipart/form-data")
+ void upload(@Param("fileKey") File file);
+}
diff --git a/src/main/java/net/geedge/asw/module/runner/controller/PcapController.java b/src/main/java/net/geedge/asw/module/runner/controller/PcapController.java
index a52bd59..7dedbfe 100644
--- a/src/main/java/net/geedge/asw/module/runner/controller/PcapController.java
+++ b/src/main/java/net/geedge/asw/module/runner/controller/PcapController.java
@@ -2,14 +2,19 @@ package net.geedge.asw.module.runner.controller;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.log.Log;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletResponse;
+import net.geedge.asw.common.config.SpringContextUtils;
import net.geedge.asw.common.util.*;
+import net.geedge.asw.module.feign.client.WebSharkClient;
import net.geedge.asw.module.runner.entity.PcapEntity;
import net.geedge.asw.module.runner.service.IPcapService;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -17,9 +22,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@RestController
@RequestMapping("/api/v1/pcap")
@@ -30,6 +33,9 @@ public class PcapController {
@Autowired
private IPcapService pcapService;
+ @Value("${webShark.url:127.0.0.1:5601}")
+ private String websharkurl;
+
@GetMapping("/{id}")
public R detail(@PathVariable("id") String id) {
PcapEntity pcapEntity = pcapService.queryInfo(id);
@@ -125,4 +131,30 @@ public class PcapController {
T.FileUtil.del(zipFile);
}
}
+
+ @GetMapping("/{id}/webshark")
+ public R webshark(@PathVariable String id) {
+ T.VerifyUtil.is(id).notEmpty();
+
+ HashMap<Object, Object> result = T.MapUtil.newHashMap();
+ PcapEntity pcap = pcapService.getById(id);
+ File pcapFile = T.FileUtil.file(pcap.getPath());
+ String uploadFileName = T.StrUtil.concat(true, id, ".", T.FileUtil.getSuffix(pcapFile));
+ File newFile = FileUtil.copy(pcapFile, FileUtil.file(Constants.TEMP_PATH, uploadFileName), false);
+ try {
+ WebSharkClient webSharkClient = (WebSharkClient) SpringContextUtils.getBean("webSharkClient");
+ webSharkClient.upload(newFile);
+
+ String baseUrl = UrlBuilder.ofHttp(websharkurl)
+ .addPath("/webshark")
+ .toString();
+ result.put("name", uploadFileName);
+ result.put("url", baseUrl);
+ }catch (Exception e){
+ log.error(e, "webshark upload pcap error, id: {}", pcap.getId());
+ }finally {
+ FileUtil.del(newFile);
+ }
+ return R.ok(result);
+ }
} \ No newline at end of file