diff options
| author | 2026-07-03 12:21:01 +0200 | |
|---|---|---|
| committer | 2026-07-09 09:59:28 +0200 | |
| commit | c0e6e508a6816fe32b517e3a4881af9da5526231 (patch) | |
| tree | f75a9752b53da31906472b5561fceb8868c44a3f | |
| parent | 1adeb5bf802945ceae4fb7b82e2032bb2a57935a (diff) | |
Added comments and minor refactoring
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/Scan.java | 3 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/Scanner.java | 16 |
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(); |
