summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-07-03 12:21:01 +0200
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-07-09 09:59:28 +0200
commitc0e6e508a6816fe32b517e3a4881af9da5526231 (patch)
treef75a9752b53da31906472b5561fceb8868c44a3f
parent1adeb5bf802945ceae4fb7b82e2032bb2a57935a (diff)
Added comments and minor refactoring
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scan.java3
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scanner.java16
2 files changed, 15 insertions, 4 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/Scan.java b/src/main/java/com/it_jaros/jscanner/Scan.java
index 7167264..e9b1c72 100644
--- a/src/main/java/com/it_jaros/jscanner/Scan.java
+++ b/src/main/java/com/it_jaros/jscanner/Scan.java
@@ -8,6 +8,9 @@ import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.util.List;
+/**
+ * Object holder for stateful volatile data during scan
+ */
public class Scan {
private final List<String> hosts;
private final ScanState state;
diff --git a/src/main/java/com/it_jaros/jscanner/Scanner.java b/src/main/java/com/it_jaros/jscanner/Scanner.java
index 26d3b14..8de423c 100644
--- a/src/main/java/com/it_jaros/jscanner/Scanner.java
+++ b/src/main/java/com/it_jaros/jscanner/Scanner.java
@@ -49,6 +49,11 @@ public class Scanner implements AutoCloseable {
}
+ /**
+ * Starts a given scan.
+ * @param scan
+ * @return
+ */
public List<ScanResult> runScan(Scan scan) {
if (scan == null) {
throw new IllegalArgumentException("Scan argument cannot be null");
@@ -61,18 +66,20 @@ public class Scanner implements AutoCloseable {
int hostsToProcess = hostsInQueue.size();
int activeHostWorkers = 0;
while ((hostsToProcess > 0 && !cancelled) || activeHostWorkers > 0) {
- // process queue
while (
!hostsInQueue.isEmpty() // continue as long as we have hosts to process
&& activeHostWorkers < maxHostsLimit // limit is not reached
&& !cancelled // and scanner not closed
) {
- activeHostWorkers++;
+ // here we are filling the completion service
+ // host <-> virtual thread
final String host = hostsInQueue.poll();
+ activeHostWorkers++;
completionService.submit(() -> scanHostPorts(host, scan.getPorts(), scan));
}
try {
+ // let's check for results and give add them to our scan data holder object
Future<ScanResult> finishedHost = completionService.poll(10, TimeUnit.MILLISECONDS);
if (finishedHost == null) {
continue;
@@ -118,8 +125,10 @@ public class Scanner implements AutoCloseable {
&& activePerHostWorkers < maxWorkersPerHost // and we have not reached our limit
&& !cancelled // and the scanner is not about to close
) {
- activePerHostWorkers++;
+ // Here we are filling the completion service
+ // port <-> virtual thread
final int currentPort = portRange.next();
+ activePerHostWorkers++;
completionService.submit(() -> {
waitForSlot(portSlotFactory);
return checkPort(host, currentPort, scan);
@@ -133,7 +142,6 @@ public class Scanner implements AutoCloseable {
}
PortResult portResult = portResultFuture.get();
-
activePerHostWorkers--;
portsToProcess--;
progress.done().incrementAndGet();