diff --git a/README.md b/README.md index 72e7be6..34aba3f 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ git submodule update --init --recursive Он должен называться `.env` и лежать в корневой директории проекта. В файле необходимо прописать: -```bash +```dotenv # Локальный IP сервера на указанном интерфейсе или в pcap файле PACKMATE_LOCAL_IP=192.168.1.124 # Имя пользователя для web-авторизации @@ -62,20 +62,25 @@ PACKMATE_WEB_PASSWORD=SomeSecurePassword ``` Если мы перехватываем трафик сервера (лучший вариант, если есть возможность): -```bash +```dotenv # Режим работы - перехват PACKMATE_MODE=LIVE # Интерфейс, на котором производится перехват трафика PACKMATE_INTERFACE=wlan0 ``` Если мы анализируем pcap дамп: -```bash +```dotenv # Режим работы - анализ файла PACKMATE_MODE=FILE # Путь до файла от корня проекта PACKMATE_PCAP_FILE=dump.pcap ``` +Или если мы хотим посмотреть уже обработанный трафик (например, для разбора после игры): +```dotenv +PACKMATE_MODE=VIEW +``` + Чтобы использовать расшифровку TLS, нужно положить соответствующий приватный ключ, который использовался для генерации сертификата, в папку `rsa_keys`. diff --git a/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java b/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java index 8cb8852..be73a7d 100644 --- a/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java +++ b/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java @@ -22,6 +22,7 @@ import ru.serega6531.packmate.WebSocketHandler; import ru.serega6531.packmate.model.enums.CaptureMode; import ru.serega6531.packmate.pcap.FilePcapWorker; import ru.serega6531.packmate.pcap.LivePcapWorker; +import ru.serega6531.packmate.pcap.NoOpPcapWorker; import ru.serega6531.packmate.pcap.PcapWorker; import ru.serega6531.packmate.service.ServicesService; import ru.serega6531.packmate.service.StreamService; @@ -58,11 +59,11 @@ public class ApplicationConfiguration extends WebSecurityConfigurerAdapter imple @Value("${interface-name}") String interfaceName, @Value("${pcap-file}") String filename, @Value("${capture-mode}") CaptureMode captureMode) throws PcapNativeException, UnknownHostException { - if(captureMode == CaptureMode.LIVE) { - return new LivePcapWorker(servicesService, streamService, localIpString, interfaceName); - } else { - return new FilePcapWorker(servicesService, streamService, subscriptionService, localIpString, filename); - } + return switch (captureMode) { + case LIVE -> new LivePcapWorker(servicesService, streamService, localIpString, interfaceName); + case FILE -> new FilePcapWorker(servicesService, streamService, subscriptionService, localIpString, filename); + default -> new NoOpPcapWorker(); + }; } @Autowired diff --git a/src/main/java/ru/serega6531/packmate/model/enums/CaptureMode.java b/src/main/java/ru/serega6531/packmate/model/enums/CaptureMode.java index 3a9e751..bd9cfd8 100644 --- a/src/main/java/ru/serega6531/packmate/model/enums/CaptureMode.java +++ b/src/main/java/ru/serega6531/packmate/model/enums/CaptureMode.java @@ -2,6 +2,6 @@ package ru.serega6531.packmate.model.enums; public enum CaptureMode { - LIVE, FILE + LIVE, FILE, VIEW } diff --git a/src/main/java/ru/serega6531/packmate/service/PcapService.java b/src/main/java/ru/serega6531/packmate/service/PcapService.java index 19e4224..528fc77 100644 --- a/src/main/java/ru/serega6531/packmate/service/PcapService.java +++ b/src/main/java/ru/serega6531/packmate/service/PcapService.java @@ -1,6 +1,5 @@ package ru.serega6531.packmate.service; -import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.pcap4j.core.PcapNativeException; import org.springframework.beans.factory.annotation.Autowired; @@ -8,6 +7,7 @@ import org.springframework.stereotype.Service; import ru.serega6531.packmate.model.CtfService; import ru.serega6531.packmate.model.enums.SubscriptionMessageType; import ru.serega6531.packmate.model.pojo.SubscriptionMessage; +import ru.serega6531.packmate.pcap.NoOpPcapWorker; import ru.serega6531.packmate.pcap.PcapWorker; import java.util.Collection; @@ -17,7 +17,6 @@ import java.util.stream.Collectors; @Slf4j public class PcapService { - @Getter private boolean started = false; private final SubscriptionService subscriptionService; @@ -29,6 +28,10 @@ public class PcapService { this.worker = worker; } + public boolean isStarted() { + return started || worker instanceof NoOpPcapWorker; + } + public synchronized void start() throws PcapNativeException { if(!started) { started = true;