summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/it_jaros/jns/scan/Scanner.java4
-rw-r--r--src/main/java/com/it_jaros/jns/scan/engine/ScanExecutionContext.java3
-rw-r--r--src/main/java/com/it_jaros/jns/scan/engine/ScanHostContext.java5
-rw-r--r--src/main/java/com/it_jaros/jns/scan/engine/ScanHostTask.java13
-rw-r--r--src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java4
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());