From 2b33f7aef4b6246dc3e025404171998a3b21298f Mon Sep 17 00:00:00 2001 From: serega6531 Date: Mon, 29 Apr 2019 03:31:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BA=D0=BE=D0=BD=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D1=81=D1=82=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/serega6531/packmate/PcapWorker.java | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/PcapWorker.java b/src/main/java/ru/serega6531/packmate/PcapWorker.java index fa651bf..c3155b6 100644 --- a/src/main/java/ru/serega6531/packmate/PcapWorker.java +++ b/src/main/java/ru/serega6531/packmate/PcapWorker.java @@ -47,8 +47,8 @@ public class PcapWorker { private final Map> unfinishedStreams = new HashMap<>(); // в следующих мапах в листах srcIp соответствующего пакета - private final Map> fins = new HashMap<>(); - private final Map> acks = new HashMap<>(); + private final Map> fins = new HashMap<>(); + private final Map> acks = new HashMap<>(); @Autowired public PcapWorker(ServicesService servicesService, @@ -115,6 +115,7 @@ public class PcapWorker { Protocol protocol = null; boolean ack = false; boolean fin = false; + boolean rst = false; if(rawPacket.contains(IpV4Packet.class)){ final IpV4Packet.IpV4Header header = rawPacket.get(IpV4Packet.class).getHeader(); @@ -131,6 +132,7 @@ public class PcapWorker { destPort = header.getDstPort().valueAsInt(); ack = header.getAck(); fin = header.getFin(); + rst = header.getRst(); content = packet.getRawData(); protocol = Protocol.TCP; } else if(rawPacket.contains(UdpPacket.class)) { @@ -152,6 +154,9 @@ public class PcapWorker { } if(serviceOptional.isPresent()) { + String sourceIpAndPort = sourceIpString + ":" + sourcePort; + String destIpAndPort = destIpString + ":" + destPort; + UnfinishedStream stream = new UnfinishedStream(sourceIp, destIp, sourcePort, destPort, protocol); ru.serega6531.packmate.model.Packet packet = ru.serega6531.packmate.model.Packet.builder() @@ -168,27 +173,35 @@ public class PcapWorker { unfinishedStreams.put(stream, packets); } + log.info("{} {} {}:{} -> {}:{}, номер пакета {}", + packet.getTempId(), serviceOptional.get(), sourceIpString, sourcePort, destIpString, destPort, + unfinishedStreams.get(stream).size()); + if(protocol == Protocol.TCP) { if(!fins.containsKey(stream)) { - fins.put(stream, new ArrayList<>()); + fins.put(stream, new HashSet<>()); } if(!acks.containsKey(stream)) { - acks.put(stream, new ArrayList<>()); + acks.put(stream, new HashSet<>()); } - if(ack && fins.get(stream).contains(destIpString)) { // проверяем destIp, потому что ищем ответ на его fin - //TODO + final Set finsForStream = fins.get(stream); + final Set acksForStream = acks.get(stream); + + if(fin) { + finsForStream.add(sourceIpAndPort); } - if(fin && acks.get(stream).contains(destIpString)) { + if(ack && finsForStream.contains(destIpAndPort)) { // проверяем destIp, потому что ищем ответ на его fin + acksForStream.add(sourceIpAndPort); + } + + if(rst || (acksForStream.contains(sourceIpAndPort) && acksForStream.contains(destIpAndPort))) { + log.info("Конец стрима"); //TODO } } - - log.info("{} {}:{} -> {}:{}, stream size {}, {} {}", - serviceOptional.get(), sourceIpString, sourcePort, destIpString, destPort, - unfinishedStreams.get(stream).size(), ack ? "ask" : "", fin ? "fin" : ""); } } }