Закончено создание стримов

This commit is contained in:
serega6531
2019-04-29 19:58:39 +03:00
parent 2b33f7aef4
commit 9c9b7cc942
5 changed files with 65 additions and 11 deletions

View File

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import ru.serega6531.packmate.model.CtfService; import ru.serega6531.packmate.model.CtfService;
import ru.serega6531.packmate.model.Stream;
import ru.serega6531.packmate.model.UnfinishedStream; import ru.serega6531.packmate.model.UnfinishedStream;
import ru.serega6531.packmate.service.PacketService; import ru.serega6531.packmate.service.PacketService;
import ru.serega6531.packmate.service.PatternService; import ru.serega6531.packmate.service.PatternService;
@@ -145,13 +146,7 @@ public class PcapWorker {
} }
if(sourceIpString != null && sourcePort != -1) { if(sourceIpString != null && sourcePort != -1) {
Optional<CtfService> serviceOptional = Optional.empty(); final Optional<CtfService> serviceOptional = findService(sourceIpString, sourcePort, destIpString, destPort);
if(sourceIpString.equals(localIp)) {
serviceOptional = servicesService.findByPort(sourcePort);
} else if(destIpString.equals(localIp)) {
serviceOptional = servicesService.findByPort(destPort);
}
if(serviceOptional.isPresent()) { if(serviceOptional.isPresent()) {
String sourceIpAndPort = sourceIpString + ":" + sourcePort; String sourceIpAndPort = sourceIpString + ":" + sourcePort;
@@ -174,7 +169,7 @@ public class PcapWorker {
} }
log.info("{} {} {}:{} -> {}:{}, номер пакета {}", log.info("{} {} {}:{} -> {}:{}, номер пакета {}",
packet.getTempId(), serviceOptional.get(), sourceIpString, sourcePort, destIpString, destPort, protocol.name().toLowerCase(), serviceOptional.get(), sourceIpString, sourcePort, destIpString, destPort,
unfinishedStreams.get(stream).size()); unfinishedStreams.get(stream).size());
if(protocol == Protocol.TCP) { if(protocol == Protocol.TCP) {
@@ -198,11 +193,46 @@ public class PcapWorker {
} }
if(rst || (acksForStream.contains(sourceIpAndPort) && acksForStream.contains(destIpAndPort))) { if(rst || (acksForStream.contains(sourceIpAndPort) && acksForStream.contains(destIpAndPort))) {
final Stream finishedStream = saveStream(stream);
log.info("Конец стрима"); log.info("Конец стрима");
//TODO //TODO send to ws
} }
} }
} }
} }
} }
private Stream saveStream(UnfinishedStream unfinishedStream) {
final List<ru.serega6531.packmate.model.Packet> packets = unfinishedStreams.get(unfinishedStream);
Stream stream = new Stream();
stream.setProtocol(unfinishedStream.getProtocol());
stream.setStartTimestamp(packets.get(0).getTimestamp());
stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp());
stream.setService(findService(
unfinishedStream.getFirstIp().getHostAddress(),
unfinishedStream.getFirstPort(),
unfinishedStream.getSecondIp().getHostAddress(),
unfinishedStream.getSecondPort()
).get());
final Stream saved = streamService.save(stream);
for (ru.serega6531.packmate.model.Packet packet : packets) {
packet.setStream(saved);
packetService.save(packet);
}
return saved;
}
private Optional<CtfService> findService(String firstIp, int firstPort, String secondIp, int secondPort) {
if(firstIp.equals(localIp)) {
return servicesService.findByPort(firstPort);
} else if(secondIp.equals(localIp)) {
return servicesService.findByPort(secondPort);
}
return Optional.empty();
}
} }

View File

@@ -33,7 +33,6 @@ public class Packet {
private long timestamp; private long timestamp;
@Lob
private byte[] content; private byte[] content;
} }

View File

@@ -33,6 +33,8 @@ public class Stream {
@OneToMany(mappedBy = "stream", cascade = CascadeType.ALL, orphanRemoval = true) @OneToMany(mappedBy = "stream", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Packet> packets; private List<Packet> packets;
private long timestamp; private long startTimestamp;
private long endTimestamp;
} }

View File

@@ -1,7 +1,22 @@
package ru.serega6531.packmate.service; package ru.serega6531.packmate.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.serega6531.packmate.model.Packet;
import ru.serega6531.packmate.repository.PacketRepository;
@Service @Service
public class PacketService { public class PacketService {
private final PacketRepository repository;
@Autowired
public PacketService(PacketRepository repository) {
this.repository = repository;
}
public Packet save(Packet packet) {
return repository.save(packet);
}
} }

View File

@@ -1,5 +1,6 @@
package ru.serega6531.packmate.service; package ru.serega6531.packmate.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.serega6531.packmate.model.Stream; import ru.serega6531.packmate.model.Stream;
@@ -8,6 +9,7 @@ import ru.serega6531.packmate.repository.StreamRepository;
import java.util.List; import java.util.List;
@Service @Service
@Slf4j
public class StreamService { public class StreamService {
private final StreamRepository repository; private final StreamRepository repository;
@@ -17,6 +19,12 @@ public class StreamService {
this.repository = repository; this.repository = repository;
} }
public Stream save(Stream stream) {
final Stream saved = repository.save(stream);
log.info("Создан стрим с id {}", saved.getId());
return saved;
}
public List<Stream> findAll() { public List<Stream> findAll() {
return repository.findAll(); return repository.findAll();
} }