diff options
Diffstat (limited to 'src/main/java/com')
4 files changed, 9 insertions, 6 deletions
diff --git a/src/main/java/com/it_jaros/jns/scan/Scanner.java b/src/main/java/com/it_jaros/jns/scan/Scanner.java index c388ef3..05231d2 100644 --- a/src/main/java/com/it_jaros/jns/scan/Scanner.java +++ b/src/main/java/com/it_jaros/jns/scan/Scanner.java @@ -1,5 +1,6 @@ package com.it_jaros.jns.scan; +import com.it_jaros.jns.scan.domain.PortRange; import com.it_jaros.jns.scan.domain.ScanResult; import com.it_jaros.jns.scan.engine.*; @@ -35,7 +36,8 @@ public class Scanner implements AutoCloseable { executor, socketLimit, cancelledToken, - scan + scan, + new PortRange(scan.getPorts()) // parsed once for the whole scan ); scan.start(); diff --git a/src/main/java/com/it_jaros/jns/scan/engine/PortRangeIterator.java b/src/main/java/com/it_jaros/jns/scan/engine/PortRangeIterator.java index e67b362..8996b34 100644 --- a/src/main/java/com/it_jaros/jns/scan/engine/PortRangeIterator.java +++ b/src/main/java/com/it_jaros/jns/scan/engine/PortRangeIterator.java @@ -4,16 +4,15 @@ import java.util.BitSet; import java.util.Iterator; import java.util.NoSuchElementException; -import static com.it_jaros.jns.scan.domain.PortRange.MAX_PORT; import static com.it_jaros.jns.scan.domain.PortRange.MIN_PORT; public class PortRangeIterator implements Iterator<Integer> { private int nextPort; // cached next-set-bit, only ever advances - private final BitSet availablePorts = new BitSet(MAX_PORT); + private final BitSet availablePorts; // shared from the scan, read-only via a monotonically advancing cursor public PortRangeIterator(BitSet specifiedPorts) { - availablePorts.or(specifiedPorts); + this.availablePorts = specifiedPorts; nextPort = availablePorts.nextSetBit(MIN_PORT); } diff --git a/src/main/java/com/it_jaros/jns/scan/engine/ScanExecutionContext.java b/src/main/java/com/it_jaros/jns/scan/engine/ScanExecutionContext.java index 96924c8..0c5f00b 100644 --- a/src/main/java/com/it_jaros/jns/scan/engine/ScanExecutionContext.java +++ b/src/main/java/com/it_jaros/jns/scan/engine/ScanExecutionContext.java @@ -2,6 +2,7 @@ package com.it_jaros.jns.scan.engine; import com.it_jaros.jns.scan.Scan; import com.it_jaros.jns.scan.ScanOptions; +import com.it_jaros.jns.scan.domain.PortRange; import java.util.concurrent.ExecutorService; import java.util.concurrent.Semaphore; @@ -11,5 +12,6 @@ public record ScanExecutionContext( ExecutorService executorService, Semaphore socketLimit, CancelledToken cancelledToken, - Scan scan + Scan scan, + PortRange portRange // parsed once per scan, shared read-only by all host tasks ) {} 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 9a4d6db..d2ce647 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 @@ -64,7 +64,7 @@ public class ScanHostTask implements Callable<ScanResult> { } } - final PortRange portRange = new PortRange(scan.getPorts()); + final PortRange portRange = context.portRange(); // parsed once per scan, shared read-only Function<Integer, Callable<PortResult>> scanFactory = this.context.scanOptions().useUdp() ? port -> new ScanUdpPortTask(port, context, hostContext) : port -> new ScanPortTask(port, context, hostContext); |
