diff --git a/src/main/java/ru/serega6531/packmate/ApplicationConfiguration.java b/src/main/java/ru/serega6531/packmate/ApplicationConfiguration.java index a3720e7..f8e5763 100644 --- a/src/main/java/ru/serega6531/packmate/ApplicationConfiguration.java +++ b/src/main/java/ru/serega6531/packmate/ApplicationConfiguration.java @@ -54,6 +54,6 @@ public class ApplicationConfiguration extends WebSecurityConfigurerAdapter imple @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { - registry.addHandler(webSocketHandler, "/ws").withSockJS(); + registry.addHandler(webSocketHandler, "/api/ws").withSockJS(); } } diff --git a/src/main/java/ru/serega6531/packmate/PackmateApplication.java b/src/main/java/ru/serega6531/packmate/PackmateApplication.java index d6cc0a8..75c99c4 100644 --- a/src/main/java/ru/serega6531/packmate/PackmateApplication.java +++ b/src/main/java/ru/serega6531/packmate/PackmateApplication.java @@ -1,6 +1,7 @@ package ru.serega6531.packmate; import org.pcap4j.core.PcapNativeException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; @@ -11,14 +12,19 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling public class PackmateApplication { + @Value("${enable-capture}") + private boolean enableCapture; + public static void main(String[] args) { SpringApplication.run(PackmateApplication.class, args); } @EventListener(ApplicationReadyEvent.class) public void afterStartup(ApplicationReadyEvent event) throws PcapNativeException { - final PcapWorker pcapWorker = event.getApplicationContext().getBean(PcapWorker.class); - pcapWorker.start(); + if(enableCapture) { + final PcapWorker pcapWorker = event.getApplicationContext().getBean(PcapWorker.class); + pcapWorker.start(); + } } } diff --git a/src/main/java/ru/serega6531/packmate/PcapWorker.java b/src/main/java/ru/serega6531/packmate/PcapWorker.java index fc707de..5106e62 100644 --- a/src/main/java/ru/serega6531/packmate/PcapWorker.java +++ b/src/main/java/ru/serega6531/packmate/PcapWorker.java @@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import ru.serega6531.packmate.model.CtfService; +import ru.serega6531.packmate.model.Protocol; import ru.serega6531.packmate.model.UnfinishedStream; import ru.serega6531.packmate.service.ServicesService; import ru.serega6531.packmate.service.StreamService; diff --git a/src/main/java/ru/serega6531/packmate/UdpStreamsSaver.java b/src/main/java/ru/serega6531/packmate/UdpStreamsSaver.java index 6e02590..4e4c057 100644 --- a/src/main/java/ru/serega6531/packmate/UdpStreamsSaver.java +++ b/src/main/java/ru/serega6531/packmate/UdpStreamsSaver.java @@ -16,7 +16,7 @@ public class UdpStreamsSaver { this.pcapWorker = pcapWorker; } - @Scheduled(fixedRateString = "PT${udp-stream-check-interval}S") + @Scheduled(fixedRateString = "PT${udp-stream-check-interval}S", initialDelayString = "PT${udp-stream-check-interval}S") public void saveStreams() { final int streamsClosed = pcapWorker.closeUdpStreams(); if(streamsClosed > 0) { diff --git a/src/main/java/ru/serega6531/packmate/Protocol.java b/src/main/java/ru/serega6531/packmate/model/Protocol.java similarity index 51% rename from src/main/java/ru/serega6531/packmate/Protocol.java rename to src/main/java/ru/serega6531/packmate/model/Protocol.java index 9ceecc6..2a5d979 100644 --- a/src/main/java/ru/serega6531/packmate/Protocol.java +++ b/src/main/java/ru/serega6531/packmate/model/Protocol.java @@ -1,4 +1,4 @@ -package ru.serega6531.packmate; +package ru.serega6531.packmate.model; public enum Protocol { TCP, UDP diff --git a/src/main/java/ru/serega6531/packmate/model/Stream.java b/src/main/java/ru/serega6531/packmate/model/Stream.java index b4efb63..7b4ee08 100644 --- a/src/main/java/ru/serega6531/packmate/model/Stream.java +++ b/src/main/java/ru/serega6531/packmate/model/Stream.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.ToString; import org.hibernate.annotations.GenericGenerator; -import ru.serega6531.packmate.Protocol; import javax.persistence.*; import java.util.List; diff --git a/src/main/java/ru/serega6531/packmate/model/UnfinishedStream.java b/src/main/java/ru/serega6531/packmate/model/UnfinishedStream.java index 96421ad..0efe063 100644 --- a/src/main/java/ru/serega6531/packmate/model/UnfinishedStream.java +++ b/src/main/java/ru/serega6531/packmate/model/UnfinishedStream.java @@ -2,7 +2,6 @@ package ru.serega6531.packmate.model; import lombok.AllArgsConstructor; import lombok.Getter; -import ru.serega6531.packmate.Protocol; import java.net.Inet4Address; diff --git a/src/main/java/ru/serega6531/packmate/service/ServicesService.java b/src/main/java/ru/serega6531/packmate/service/ServicesService.java index 7cf578f..014eb03 100644 --- a/src/main/java/ru/serega6531/packmate/service/ServicesService.java +++ b/src/main/java/ru/serega6531/packmate/service/ServicesService.java @@ -39,6 +39,7 @@ public class ServicesService { } public void deleteByPort(int port) { + log.info("Удален сервис на порту {}", port); repository.deleteById(port); } diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index 0fa6c39..eb5d57f 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -5,10 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ru.serega6531.packmate.model.Packet; -import ru.serega6531.packmate.model.Pattern; -import ru.serega6531.packmate.model.Stream; -import ru.serega6531.packmate.model.UnfinishedStream; +import ru.serega6531.packmate.model.*; import ru.serega6531.packmate.repository.StreamRepository; import java.util.*; @@ -42,17 +39,25 @@ public class StreamService { @Transactional public void saveNewStream(UnfinishedStream unfinishedStream, List packets) { - Stream stream = new Stream(); - stream.setProtocol(unfinishedStream.getProtocol()); - stream.setStartTimestamp(packets.get(0).getTimestamp()); - stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp()); - stream.setService(servicesService.findService( + final Optional serviceOptional = servicesService.findService( localIp, unfinishedStream.getFirstIp().getHostAddress(), unfinishedStream.getFirstPort(), unfinishedStream.getSecondIp().getHostAddress(), unfinishedStream.getSecondPort() - ).get()); + ); + + if (!serviceOptional.isPresent()) { + log.info("Не удалось сохранить стрим: сервиса на порту {} или {} не существует", + unfinishedStream.getFirstPort(), unfinishedStream.getSecondPort()); + return; + } + + Stream stream = new Stream(); + stream.setProtocol(unfinishedStream.getProtocol()); + stream.setStartTimestamp(packets.get(0).getTimestamp()); + stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp()); + stream.setService(serviceOptional.get()); Stream savedStream = save(stream); @@ -74,7 +79,7 @@ public class StreamService { public Stream save(Stream stream) { Stream saved; - if(stream.getId() == null) { + if (stream.getId() == null) { saved = repository.save(stream); log.info("Создан стрим с id {}", saved.getId()); } else { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 83b0782..33dbc83 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -11,6 +11,8 @@ spring: hibernate: temp: use_jdbc_metadata_defaults: false + +enable-capture: false interface-name: enp0s31f6 local-ip: "192.168.0.125" account-login: BinaryBears