Закончено разделение на стримы
This commit is contained in:
@@ -47,8 +47,8 @@ public class PcapWorker {
|
|||||||
private final Map<UnfinishedStream, List<ru.serega6531.packmate.model.Packet>> unfinishedStreams = new HashMap<>();
|
private final Map<UnfinishedStream, List<ru.serega6531.packmate.model.Packet>> unfinishedStreams = new HashMap<>();
|
||||||
|
|
||||||
// в следующих мапах в листах srcIp соответствующего пакета
|
// в следующих мапах в листах srcIp соответствующего пакета
|
||||||
private final Map<UnfinishedStream, List<String>> fins = new HashMap<>();
|
private final Map<UnfinishedStream, Set<String>> fins = new HashMap<>();
|
||||||
private final Map<UnfinishedStream, List<String>> acks = new HashMap<>();
|
private final Map<UnfinishedStream, Set<String>> acks = new HashMap<>();
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public PcapWorker(ServicesService servicesService,
|
public PcapWorker(ServicesService servicesService,
|
||||||
@@ -115,6 +115,7 @@ public class PcapWorker {
|
|||||||
Protocol protocol = null;
|
Protocol protocol = null;
|
||||||
boolean ack = false;
|
boolean ack = false;
|
||||||
boolean fin = false;
|
boolean fin = false;
|
||||||
|
boolean rst = false;
|
||||||
|
|
||||||
if(rawPacket.contains(IpV4Packet.class)){
|
if(rawPacket.contains(IpV4Packet.class)){
|
||||||
final IpV4Packet.IpV4Header header = rawPacket.get(IpV4Packet.class).getHeader();
|
final IpV4Packet.IpV4Header header = rawPacket.get(IpV4Packet.class).getHeader();
|
||||||
@@ -131,6 +132,7 @@ public class PcapWorker {
|
|||||||
destPort = header.getDstPort().valueAsInt();
|
destPort = header.getDstPort().valueAsInt();
|
||||||
ack = header.getAck();
|
ack = header.getAck();
|
||||||
fin = header.getFin();
|
fin = header.getFin();
|
||||||
|
rst = header.getRst();
|
||||||
content = packet.getRawData();
|
content = packet.getRawData();
|
||||||
protocol = Protocol.TCP;
|
protocol = Protocol.TCP;
|
||||||
} else if(rawPacket.contains(UdpPacket.class)) {
|
} else if(rawPacket.contains(UdpPacket.class)) {
|
||||||
@@ -152,6 +154,9 @@ public class PcapWorker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(serviceOptional.isPresent()) {
|
if(serviceOptional.isPresent()) {
|
||||||
|
String sourceIpAndPort = sourceIpString + ":" + sourcePort;
|
||||||
|
String destIpAndPort = destIpString + ":" + destPort;
|
||||||
|
|
||||||
UnfinishedStream stream = new UnfinishedStream(sourceIp, destIp, sourcePort, destPort, protocol);
|
UnfinishedStream stream = new UnfinishedStream(sourceIp, destIp, sourcePort, destPort, protocol);
|
||||||
|
|
||||||
ru.serega6531.packmate.model.Packet packet = ru.serega6531.packmate.model.Packet.builder()
|
ru.serega6531.packmate.model.Packet packet = ru.serega6531.packmate.model.Packet.builder()
|
||||||
@@ -168,27 +173,35 @@ public class PcapWorker {
|
|||||||
unfinishedStreams.put(stream, packets);
|
unfinishedStreams.put(stream, packets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.info("{} {} {}:{} -> {}:{}, номер пакета {}",
|
||||||
|
packet.getTempId(), serviceOptional.get(), sourceIpString, sourcePort, destIpString, destPort,
|
||||||
|
unfinishedStreams.get(stream).size());
|
||||||
|
|
||||||
if(protocol == Protocol.TCP) {
|
if(protocol == Protocol.TCP) {
|
||||||
if(!fins.containsKey(stream)) {
|
if(!fins.containsKey(stream)) {
|
||||||
fins.put(stream, new ArrayList<>());
|
fins.put(stream, new HashSet<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!acks.containsKey(stream)) {
|
if(!acks.containsKey(stream)) {
|
||||||
acks.put(stream, new ArrayList<>());
|
acks.put(stream, new HashSet<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ack && fins.get(stream).contains(destIpString)) { // проверяем destIp, потому что ищем ответ на его fin
|
final Set<String> finsForStream = fins.get(stream);
|
||||||
//TODO
|
final Set<String> 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
|
//TODO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("{} {}:{} -> {}:{}, stream size {}, {} {}",
|
|
||||||
serviceOptional.get(), sourceIpString, sourcePort, destIpString, destPort,
|
|
||||||
unfinishedStreams.get(stream).size(), ack ? "ask" : "", fin ? "fin" : "");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user