Добавлена опция игнорирования пустых пакетов

This commit is contained in:
serega6531
2019-05-01 21:10:36 +03:00
parent b4a9903d1b
commit bcc1221cbe
3 changed files with 20 additions and 5 deletions

View File

@@ -130,14 +130,14 @@ public class PcapWorker {
ack = header.getAck(); ack = header.getAck();
fin = header.getFin(); fin = header.getFin();
rst = header.getRst(); rst = header.getRst();
content = packet.getRawData(); content = packet.getPayload() != null ? packet.getPayload().getRawData() : new byte[0];
protocol = Protocol.TCP; protocol = Protocol.TCP;
} else if (rawPacket.contains(UdpPacket.class)) { } else if (rawPacket.contains(UdpPacket.class)) {
final UdpPacket packet = rawPacket.get(UdpPacket.class); final UdpPacket packet = rawPacket.get(UdpPacket.class);
final UdpPacket.UdpHeader header = packet.getHeader(); final UdpPacket.UdpHeader header = packet.getHeader();
sourcePort = header.getSrcPort().valueAsInt(); sourcePort = header.getSrcPort().valueAsInt();
destPort = header.getDstPort().valueAsInt(); destPort = header.getDstPort().valueAsInt();
content = packet.getRawData(); content = packet.getPayload() != null ? packet.getPayload().getRawData() : new byte[0];
protocol = Protocol.UDP; protocol = Protocol.UDP;
} }
@@ -157,9 +157,11 @@ public class PcapWorker {
.content(content) .content(content)
.build(); .build();
if (unfinishedStreams.containsKey(stream)) { if (unfinishedStreams.containsKey(stream)) {
unfinishedStreams.get(stream).add(packet); unfinishedStreams.get(stream).add(packet);
} else { } else {
log.info("Начат новый стрим");
List<ru.serega6531.packmate.model.Packet> packets = new ArrayList<>(); List<ru.serega6531.packmate.model.Packet> packets = new ArrayList<>();
packets.add(packet); packets.add(packet);
unfinishedStreams.put(stream, packets); unfinishedStreams.put(stream, packets);

View File

@@ -23,6 +23,7 @@ public class StreamService {
private final StreamSubscriptionService subscriptionService; private final StreamSubscriptionService subscriptionService;
private final String localIp; private final String localIp;
private final boolean ignoreEmptyPackets;
@Autowired @Autowired
public StreamService(StreamRepository repository, public StreamService(StreamRepository repository,
@@ -30,13 +31,15 @@ public class StreamService {
ServicesService servicesService, ServicesService servicesService,
PacketService packetService, PacketService packetService,
StreamSubscriptionService subscriptionService, StreamSubscriptionService subscriptionService,
@Value("${local-ip}") String localIp) { @Value("${local-ip}") String localIp,
@Value("${ignore-empty-packets}") boolean ignoreEmptyPackets) {
this.repository = repository; this.repository = repository;
this.patternService = patternService; this.patternService = patternService;
this.servicesService = servicesService; this.servicesService = servicesService;
this.packetService = packetService; this.packetService = packetService;
this.subscriptionService = subscriptionService; this.subscriptionService = subscriptionService;
this.localIp = localIp; this.localIp = localIp;
this.ignoreEmptyPackets = ignoreEmptyPackets;
} }
@Transactional @Transactional
@@ -61,6 +64,15 @@ public class StreamService {
stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp()); stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp());
stream.setService(serviceOptional.get()); stream.setService(serviceOptional.get());
if(ignoreEmptyPackets) {
packets.removeIf(packet -> packet.getContent().length == 0);
if(packets.isEmpty()) {
log.info("Стрим состоит только из пустых пакетов и не будет сохранен");
return;
}
}
Stream savedStream = save(stream); Stream savedStream = save(stream);
List<ru.serega6531.packmate.model.Packet> savedPackets = new ArrayList<>(); List<ru.serega6531.packmate.model.Packet> savedPackets = new ArrayList<>();

View File

@@ -12,10 +12,11 @@ spring:
temp: temp:
use_jdbc_metadata_defaults: false use_jdbc_metadata_defaults: false
enable-capture: false enable-capture: true
interface-name: enp0s31f6 interface-name: enp0s31f6
local-ip: "192.168.0.125" local-ip: "192.168.0.125"
account-login: BinaryBears account-login: BinaryBears
account-password: 123456 account-password: 123456
udp-stream-timeout: 20 # секунд udp-stream-timeout: 20 # секунд
udp-stream-check-interval: 10 udp-stream-check-interval: 10
ignore-empty-packets: true