From 8e835e4ea35895ad24c59e4a1477d5205e837975 Mon Sep 17 00:00:00 2001 From: shizhendong Date: Mon, 26 Aug 2024 15:02:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8D=95=E7=8B=AC=E4=BF=9D=E5=AD=98=20p?= =?UTF-8?q?cap=20common=20=E6=96=87=E4=BB=B6=EF=BC=8C=E4=B8=8D=E5=AF=B9?= =?UTF-8?q?=E6=BA=90=E6=96=87=E4=BB=B6=E8=BF=9B=E8=A1=8C=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 单独保存 pcap common 文件,不对源文件进行覆盖 2. 删除解析结果时,重置 summary 内容 --- .../runner/controller/PcapController.java | 3 ++- .../asw/module/runner/entity/PcapEntity.java | 9 ++++++++ .../runner/service/impl/PcapServiceImpl.java | 5 ++++ .../module/runner/util/PcapParserThread.java | 23 ++++--------------- 4 files changed, 21 insertions(+), 19 deletions(-) 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 c6caf0e..50c434a 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 @@ -139,7 +139,8 @@ public class PcapController { HashMap result = T.MapUtil.newHashMap(); PcapEntity pcap = pcapService.getById(id); - File pcapFile = T.FileUtil.file(pcap.getPath()); + File pcapFile = pcap.getCommonPcapFilePath().toFile(); + pcapFile = FileUtil.exist(pcapFile) ? 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 { diff --git a/src/main/java/net/geedge/asw/module/runner/entity/PcapEntity.java b/src/main/java/net/geedge/asw/module/runner/entity/PcapEntity.java index a98c290..4d5cf27 100644 --- a/src/main/java/net/geedge/asw/module/runner/entity/PcapEntity.java +++ b/src/main/java/net/geedge/asw/module/runner/entity/PcapEntity.java @@ -4,12 +4,16 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import net.geedge.asw.common.util.T; import net.geedge.asw.module.app.entity.ApplicationEntity; import net.geedge.asw.module.app.entity.PackageEntity; import net.geedge.asw.module.workspace.entity.WorkspaceEntity; +import java.nio.file.Path; + @Data @TableName("pcap") public class PcapEntity { @@ -46,4 +50,9 @@ public class PcapEntity { @TableField(exist = false) private PlaybookEntity playbook; + @JsonIgnore + public Path getCommonPcapFilePath() { + return Path.of(T.WebPathUtil.getRootPath(), this.workspaceId, "pcap_comment", this.id + ".pcapng"); + } + } \ No newline at end of file diff --git a/src/main/java/net/geedge/asw/module/runner/service/impl/PcapServiceImpl.java b/src/main/java/net/geedge/asw/module/runner/service/impl/PcapServiceImpl.java index de85170..d0ff3d0 100644 --- a/src/main/java/net/geedge/asw/module/runner/service/impl/PcapServiceImpl.java +++ b/src/main/java/net/geedge/asw/module/runner/service/impl/PcapServiceImpl.java @@ -191,6 +191,7 @@ public class PcapServiceImpl extends ServiceImpl implements PcapEntity pcap = this.getById(id); // remove file T.FileUtil.del(pcap.getPath()); + T.FileUtil.del(pcap.getCommonPcapFilePath()); // remove this.removeById(id); @@ -278,6 +279,10 @@ public class PcapServiceImpl extends ServiceImpl implements throw new RuntimeException("delete openSearch index error ", e); } pcapEntity.setStatus(RunnerConstant.PcapStatus.UPLOADED.getValue()); + // reset summary + pcapEntity.setSummary("{}"); + // del common pcap file + T.FileUtil.del(pcapEntity.getCommonPcapFilePath().toFile()); this.updateById(pcapEntity); } } diff --git a/src/main/java/net/geedge/asw/module/runner/util/PcapParserThread.java b/src/main/java/net/geedge/asw/module/runner/util/PcapParserThread.java index 7fd22ca..3885162 100644 --- a/src/main/java/net/geedge/asw/module/runner/util/PcapParserThread.java +++ b/src/main/java/net/geedge/asw/module/runner/util/PcapParserThread.java @@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import feign.Response; import lombok.Data; import net.geedge.asw.common.config.SpringContextUtils; -import net.geedge.asw.common.util.Constants; import net.geedge.asw.common.util.RCode; import net.geedge.asw.common.util.T; import net.geedge.asw.module.feign.client.GeoipClient; @@ -101,23 +100,10 @@ public class PcapParserThread implements Runnable { throw new RuntimeException("Failed to add common to pcap"); } - // temp file - File file = T.FileUtil.file(Constants.TEMP_PATH, pcapEntity.getId() + ".pcapng"); - FileUtils.copyInputStreamToFile(response.body().asInputStream(), file); - - // override source file - T.FileUtil.del(T.FileUtil.file(pcapEntity.getPath())); - File updatePcapFile = T.FileUtil.file(T.WebPathUtil.getRootPath(), pcapEntity.getWorkspaceId(), file.getName()); - T.FileUtil.move(file, updatePcapFile, true); - - // update name,path,md5,size - String md5Hex = T.DigestUtil.md5Hex(updatePcapFile); - long filesize = T.FileUtil.size(updatePcapFile); - pcapEntity.setName(updatePcapFile.getName()); - pcapEntity.setPath(updatePcapFile.getAbsolutePath()); - pcapEntity.setMd5(md5Hex); - pcapEntity.setSize(filesize); - pcapService.updateById(pcapEntity); + // file path: /{path}/{workspace_id}/pcap_comment/{pcap_id}.pcapng + File destination = pcapEntity.getCommonPcapFilePath().toFile(); + T.FileUtil.del(destination); + FileUtils.copyInputStreamToFile(response.body().asInputStream(), destination); } /** @@ -230,6 +216,7 @@ public class PcapParserThread implements Runnable { .put("sessions", jsonArray.size()) .put("packets", packets) .put("services", services) + .put("commentPath", pcapEntity.getCommonPcapFilePath().toString()) .build(); pcapService.update(new LambdaUpdateWrapper() .set(PcapEntity::getSummary, T.JSONUtil.toJsonStr(m))