diff --git a/src/main/java/ru/serega6531/packmate/PcapWorker.java b/src/main/java/ru/serega6531/packmate/PcapWorker.java index 5106e62..be69232 100644 --- a/src/main/java/ru/serega6531/packmate/PcapWorker.java +++ b/src/main/java/ru/serega6531/packmate/PcapWorker.java @@ -130,14 +130,14 @@ public class PcapWorker { ack = header.getAck(); fin = header.getFin(); rst = header.getRst(); - content = packet.getRawData(); + content = packet.getPayload() != null ? packet.getPayload().getRawData() : new byte[0]; protocol = Protocol.TCP; } else if (rawPacket.contains(UdpPacket.class)) { final UdpPacket packet = rawPacket.get(UdpPacket.class); final UdpPacket.UdpHeader header = packet.getHeader(); sourcePort = header.getSrcPort().valueAsInt(); destPort = header.getDstPort().valueAsInt(); - content = packet.getRawData(); + content = packet.getPayload() != null ? packet.getPayload().getRawData() : new byte[0]; protocol = Protocol.UDP; } @@ -157,9 +157,11 @@ public class PcapWorker { .content(content) .build(); + if (unfinishedStreams.containsKey(stream)) { unfinishedStreams.get(stream).add(packet); } else { + log.info("Начат новый стрим"); List packets = new ArrayList<>(); packets.add(packet); unfinishedStreams.put(stream, packets); diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index 2ce84af..061f2c9 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -23,6 +23,7 @@ public class StreamService { private final StreamSubscriptionService subscriptionService; private final String localIp; + private final boolean ignoreEmptyPackets; @Autowired public StreamService(StreamRepository repository, @@ -30,13 +31,15 @@ public class StreamService { ServicesService servicesService, PacketService packetService, StreamSubscriptionService subscriptionService, - @Value("${local-ip}") String localIp) { + @Value("${local-ip}") String localIp, + @Value("${ignore-empty-packets}") boolean ignoreEmptyPackets) { this.repository = repository; this.patternService = patternService; this.servicesService = servicesService; this.packetService = packetService; this.subscriptionService = subscriptionService; this.localIp = localIp; + this.ignoreEmptyPackets = ignoreEmptyPackets; } @Transactional @@ -61,6 +64,15 @@ public class StreamService { stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp()); stream.setService(serviceOptional.get()); + if(ignoreEmptyPackets) { + packets.removeIf(packet -> packet.getContent().length == 0); + + if(packets.isEmpty()) { + log.info("Стрим состоит только из пустых пакетов и не будет сохранен"); + return; + } + } + Stream savedStream = save(stream); List savedPackets = new ArrayList<>(); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 33dbc83..cba2233 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -12,10 +12,11 @@ spring: temp: use_jdbc_metadata_defaults: false -enable-capture: false +enable-capture: true interface-name: enp0s31f6 local-ip: "192.168.0.125" account-login: BinaryBears account-password: 123456 udp-stream-timeout: 20 # секунд -udp-stream-check-interval: 10 \ No newline at end of file +udp-stream-check-interval: 10 +ignore-empty-packets: true \ No newline at end of file