diff options
Diffstat (limited to 'src/main/java/com/it_jaros')
5 files changed, 20 insertions, 9 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 82257fb..00cd937 100644 --- a/src/main/java/com/it_jaros/jns/scan/Scanner.java +++ b/src/main/java/com/it_jaros/jns/scan/Scanner.java @@ -29,14 +29,12 @@ public class Scanner implements AutoCloseable { throw new IllegalArgumentException("Scan argument cannot be null"); } - long delayInNanos = TimeUnit.MILLISECONDS.toNanos(Math.max(0, scanOptions.delayInMillis())); ScanExecutionContext context = new ScanExecutionContext( scanOptions, executor, socketLimit, cancelledToken, - scan, - new PortScanRateLimiter(cancelledToken, delayInNanos) + scan ); scan.start(); 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 42b42f1..96924c8 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 @@ -11,6 +11,5 @@ public record ScanExecutionContext( ExecutorService executorService, Semaphore socketLimit, CancelledToken cancelledToken, - Scan scan, - PortScanRateLimiter portScanRateLimiter + Scan scan ) {} diff --git a/src/main/java/com/it_jaros/jns/scan/engine/ScanHostContext.java b/src/main/java/com/it_jaros/jns/scan/engine/ScanHostContext.java new file mode 100644 index 0000000..a4a6777 --- /dev/null +++ b/src/main/java/com/it_jaros/jns/scan/engine/ScanHostContext.java @@ -0,0 +1,5 @@ +package com.it_jaros.jns.scan.engine; + +public record ScanHostContext( + PortScanRateLimiter portScanRateLimiter +) {} 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 de92439..f8ff8a2 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 @@ -22,6 +22,7 @@ public class ScanHostTask implements Callable<ScanResult> { private final String host; // input parameter private final boolean disableOnlineCheck; private final int maxWorkersPerHost; + private final ScanHostContext hostContext; public ScanHostTask(String host, ScanExecutionContext context) { this.host = host; @@ -31,6 +32,14 @@ public class ScanHostTask implements Callable<ScanResult> { this.disableOnlineCheck = context.scanOptions().disableOnlineCheck(); this.maxWorkersPerHost = context.scanOptions().maxWorkersPerHost(); this.scan = context.scan(); + + long delayInNanos = TimeUnit.MILLISECONDS.toNanos(Math.max(0, context.scanOptions().delayInMillis())); + this.hostContext = new ScanHostContext( + new PortScanRateLimiter( + context.cancelledToken(), + delayInNanos + ) + ); } @Override @@ -63,7 +72,7 @@ public class ScanHostTask implements Callable<ScanResult> { ProducerState<PortResult> state = new ProducerThread(context).startProducer( portRange.iterator(), maxWorkersPerHost, - port -> new ScanPortTask(hostAddress, port, context) + port -> new ScanPortTask(hostAddress, port, context, hostContext) ); // consumer is the main thread @@ -88,7 +97,7 @@ public class ScanHostTask implements Callable<ScanResult> { private boolean checkHostOnline() { try { - PortResult result = new ScanPortTask(hostAddress, 7, context).call(); + PortResult result = new ScanPortTask(hostAddress, 7, context, hostContext).call(); Exception exception = result.getException(); accumulator.add(result); if (exception == null && !result.getState().equals(PortState.FILTERED)) { diff --git a/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java b/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java index 3a3fffd..2203db6 100644 --- a/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java +++ b/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java @@ -29,12 +29,12 @@ public class ScanPortTask implements Callable<PortResult> { private final int port; private final long timeoutInNanos; - ScanPortTask(InetAddress inetAddress, int port, ScanExecutionContext context) { + ScanPortTask(InetAddress inetAddress, int port, ScanExecutionContext context, ScanHostContext hostContext) { this.inetAddress = inetAddress; this.port = port; this.bannerRecognition = context.scanOptions().bannerRecognition(); this.cancelledToken = context.cancelledToken(); - this.portScanRateLimiter = context.portScanRateLimiter(); + this.portScanRateLimiter = hostContext.portScanRateLimiter(); this.scan = context.scan(); this.socketLimit = context.socketLimit(); this.timeoutInNanos = TimeUnit.MILLISECONDS.toNanos(context.scanOptions().timeoutInMillis()); |
