fix: 单独保存 pcap common 文件,不对源文件进行覆盖

1. 单独保存 pcap common 文件,不对源文件进行覆盖
2. 删除解析结果时,重置 summary 内容
This commit is contained in:
shizhendong
2024-08-26 15:02:20 +08:00
parent 1db74870e0
commit 8e835e4ea3
4 changed files with 21 additions and 19 deletions

View File

@@ -139,7 +139,8 @@ public class PcapController {
HashMap<Object, Object> result = T.MapUtil.newHashMap(); HashMap<Object, Object> result = T.MapUtil.newHashMap();
PcapEntity pcap = pcapService.getById(id); 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)); String uploadFileName = T.StrUtil.concat(true, id, ".", T.FileUtil.getSuffix(pcapFile));
File newFile = FileUtil.copy(pcapFile, FileUtil.file(Constants.TEMP_PATH, uploadFileName), false); File newFile = FileUtil.copy(pcapFile, FileUtil.file(Constants.TEMP_PATH, uploadFileName), false);
try { try {

View File

@@ -4,12 +4,16 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; 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.ApplicationEntity;
import net.geedge.asw.module.app.entity.PackageEntity; import net.geedge.asw.module.app.entity.PackageEntity;
import net.geedge.asw.module.workspace.entity.WorkspaceEntity; import net.geedge.asw.module.workspace.entity.WorkspaceEntity;
import java.nio.file.Path;
@Data @Data
@TableName("pcap") @TableName("pcap")
public class PcapEntity { public class PcapEntity {
@@ -46,4 +50,9 @@ public class PcapEntity {
@TableField(exist = false) @TableField(exist = false)
private PlaybookEntity playbook; private PlaybookEntity playbook;
@JsonIgnore
public Path getCommonPcapFilePath() {
return Path.of(T.WebPathUtil.getRootPath(), this.workspaceId, "pcap_comment", this.id + ".pcapng");
}
} }

View File

@@ -191,6 +191,7 @@ public class PcapServiceImpl extends ServiceImpl<PcapDao, PcapEntity> implements
PcapEntity pcap = this.getById(id); PcapEntity pcap = this.getById(id);
// remove file // remove file
T.FileUtil.del(pcap.getPath()); T.FileUtil.del(pcap.getPath());
T.FileUtil.del(pcap.getCommonPcapFilePath());
// remove // remove
this.removeById(id); this.removeById(id);
@@ -278,6 +279,10 @@ public class PcapServiceImpl extends ServiceImpl<PcapDao, PcapEntity> implements
throw new RuntimeException("delete openSearch index error ", e); throw new RuntimeException("delete openSearch index error ", e);
} }
pcapEntity.setStatus(RunnerConstant.PcapStatus.UPLOADED.getValue()); pcapEntity.setStatus(RunnerConstant.PcapStatus.UPLOADED.getValue());
// reset summary
pcapEntity.setSummary("{}");
// del common pcap file
T.FileUtil.del(pcapEntity.getCommonPcapFilePath().toFile());
this.updateById(pcapEntity); this.updateById(pcapEntity);
} }
} }

View File

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import feign.Response; import feign.Response;
import lombok.Data; import lombok.Data;
import net.geedge.asw.common.config.SpringContextUtils; 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.RCode;
import net.geedge.asw.common.util.T; import net.geedge.asw.common.util.T;
import net.geedge.asw.module.feign.client.GeoipClient; 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"); throw new RuntimeException("Failed to add common to pcap");
} }
// temp file // file path: /{path}/{workspace_id}/pcap_comment/{pcap_id}.pcapng
File file = T.FileUtil.file(Constants.TEMP_PATH, pcapEntity.getId() + ".pcapng"); File destination = pcapEntity.getCommonPcapFilePath().toFile();
FileUtils.copyInputStreamToFile(response.body().asInputStream(), file); T.FileUtil.del(destination);
FileUtils.copyInputStreamToFile(response.body().asInputStream(), destination);
// 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);
} }
/** /**
@@ -230,6 +216,7 @@ public class PcapParserThread implements Runnable {
.put("sessions", jsonArray.size()) .put("sessions", jsonArray.size())
.put("packets", packets) .put("packets", packets)
.put("services", services) .put("services", services)
.put("commentPath", pcapEntity.getCommonPcapFilePath().toString())
.build(); .build();
pcapService.update(new LambdaUpdateWrapper<PcapEntity>() pcapService.update(new LambdaUpdateWrapper<PcapEntity>()
.set(PcapEntity::getSummary, T.JSONUtil.toJsonStr(m)) .set(PcapEntity::getSummary, T.JSONUtil.toJsonStr(m))