diff options
Diffstat (limited to 'src/main/java/com')
| -rw-r--r-- | src/main/java/com/it_jaros/jns/CliPrinter.java | 7 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jns/scan/domain/ScanFailure.java | 4 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jns/scan/engine/PortScanResultAccumulator.java (renamed from src/main/java/com/it_jaros/jns/scan/engine/PortResultAccumulator.java) | 23 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jns/scan/engine/ScanHostTask.java | 4 |
4 files changed, 26 insertions, 12 deletions
diff --git a/src/main/java/com/it_jaros/jns/CliPrinter.java b/src/main/java/com/it_jaros/jns/CliPrinter.java index c8969d9..6ceb399 100644 --- a/src/main/java/com/it_jaros/jns/CliPrinter.java +++ b/src/main/java/com/it_jaros/jns/CliPrinter.java @@ -58,10 +58,11 @@ public class CliPrinter { result.errors().size() )); String errors = result.errors().stream().map((ScanFailure error) -> String.format( - "\t%s: %s, %s", - error.port(), + "\t%dx %s: %s ports: %s", + error.ports().size(), error.exception().type(), - error.exception().message() + error.exception().message(), + error.ports().stream().sorted().map(String::valueOf).collect(Collectors.joining(",")) )).collect(Collectors.joining("\n")); sb.append(errors); sb.append("\n"); diff --git a/src/main/java/com/it_jaros/jns/scan/domain/ScanFailure.java b/src/main/java/com/it_jaros/jns/scan/domain/ScanFailure.java index 8a16a5d..a65d84e 100644 --- a/src/main/java/com/it_jaros/jns/scan/domain/ScanFailure.java +++ b/src/main/java/com/it_jaros/jns/scan/domain/ScanFailure.java @@ -2,8 +2,10 @@ package com.it_jaros.jns.scan.domain; import com.it_jaros.jns.scan.ExceptionInfo; +import java.util.List; + public record ScanFailure( - Integer port, + List<Integer> ports, ExceptionInfo exception ) { } diff --git a/src/main/java/com/it_jaros/jns/scan/engine/PortResultAccumulator.java b/src/main/java/com/it_jaros/jns/scan/engine/PortScanResultAccumulator.java index bcb6432..89238ed 100644 --- a/src/main/java/com/it_jaros/jns/scan/engine/PortResultAccumulator.java +++ b/src/main/java/com/it_jaros/jns/scan/engine/PortScanResultAccumulator.java @@ -7,14 +7,14 @@ import com.it_jaros.jns.scan.service.ServiceType; import java.util.*; -final class PortResultAccumulator { +final class PortScanResultAccumulator { private final String host; private final BitSet openPorts = new BitSet(PortRange.MAX_PORT); private final BitSet filteredPorts = new BitSet(PortRange.MAX_PORT); private final Map<Integer, ServiceType> serviceTypes = new HashMap<>(); - private final List<ScanFailure> scanFailures = new ArrayList<>(); + private final Map<Class<? extends Throwable>, ScanFailure> failureCounts = new HashMap<>(); - PortResultAccumulator(String host) { + PortScanResultAccumulator(String host) { this.host = host; } @@ -31,19 +31,30 @@ final class PortResultAccumulator { // intentional no-op for uncovered port states } } - Exception e = portResult.getException(); + final Exception e = portResult.getException(); if (e != null) { - scanFailures.add(new ScanFailure(portResult.getPort(), ExceptionInfo.from(e))); + ScanFailure scanFailure = failureCounts.computeIfAbsent( + e.getClass(), + k -> new ScanFailure( + new ArrayList<>(), + ExceptionInfo.from(e) + ) + ); + scanFailure.ports().add(portResult.getPort()); } } + List<ScanFailure> getFailureSummary() { + return failureCounts.values().stream().toList(); + } + ScanResult build() { return new ScanResult( host, new PortList(openPorts), new PortList(filteredPorts), Collections.unmodifiableMap(serviceTypes), - Collections.unmodifiableList(scanFailures) + getFailureSummary() ); } } diff --git a/src/main/java/com/it_jaros/jns/scan/engine/ScanHostTask.java b/src/main/java/com/it_jaros/jns/scan/engine/ScanHostTask.java index 675dadd..d27cae2 100644 --- a/src/main/java/com/it_jaros/jns/scan/engine/ScanHostTask.java +++ b/src/main/java/com/it_jaros/jns/scan/engine/ScanHostTask.java @@ -16,17 +16,17 @@ public class ScanHostTask implements Callable<ScanResult> { private final CancelledToken cancelledToken; private InetAddress hostAddress; + private final PortScanResultAccumulator accumulator; private final Scan scan; private final ScanExecutionContext context; private final String host; // input parameter private final boolean disableOnlineCheck; private final int maxWorkersPerHost; - private final PortResultAccumulator accumulator; public ScanHostTask(String host, ScanExecutionContext context) { this.host = host; this.context = context; - this.accumulator = new PortResultAccumulator(host); + this.accumulator = new PortScanResultAccumulator(host); this.cancelledToken = context.cancelledToken(); this.disableOnlineCheck = context.scanOptions().disableOnlineCheck(); this.maxWorkersPerHost = context.scanOptions().maxWorkersPerHost(); |
