From 634166c4b3f8aeefa90bb0d3ec08f65b7e63ca4f Mon Sep 17 00:00:00 2001 From: zhangshuai Date: Thu, 15 Aug 2024 15:09:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ASW-38=20webshark=20=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feign/FeignClientConfiguration.java | 15 ++++++++ .../module/feign/client/WebSharkClient.java | 17 +++++++++ .../runner/controller/PcapController.java | 38 +++++++++++++++++-- 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/geedge/asw/module/feign/client/WebSharkClient.java 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 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