summaryrefslogtreecommitdiff
path: root/src/main/java/com/it_jaros/jscanner/Scan.java
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-07-02 18:09:16 +0200
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-07-09 09:59:28 +0200
commit65052fa3393287b88bf4419bb67cd82663762022 (patch)
tree657d4fdd5b11a69000fa23346ef5dd449548b629 /src/main/java/com/it_jaros/jscanner/Scan.java
parentc0ded372e09ba5eaf36a05b425823a6cedf9fb86 (diff)
Reformatted code so that Scan is initialized in Scan class and Scanner
takes care of the actual Scan and not initializing Scan objects anymore
Diffstat (limited to 'src/main/java/com/it_jaros/jscanner/Scan.java')
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scan.java80
1 files changed, 77 insertions, 3 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/Scan.java b/src/main/java/com/it_jaros/jscanner/Scan.java
index f680326..7167264 100644
--- a/src/main/java/com/it_jaros/jscanner/Scan.java
+++ b/src/main/java/com/it_jaros/jscanner/Scan.java
@@ -1,14 +1,88 @@
package com.it_jaros.jscanner;
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.Path;
import java.util.List;
-public record Scan(List<String> hosts, String ports, ScanState state) {
+public class Scan {
+ private final List<String> hosts;
+ private final ScanState state;
+ private final String ports;
+ private final Counter counter;
+ private final ProgressBar progressBar;
+
+ private Scan(List<String> hosts, String ports, ScanState state, boolean quiet) {
+ this.hosts = hosts;
+ this.ports = ports;
+ this.state = state;
+ this.counter = new Counter();
+ this.progressBar = new ProgressBar(quiet);
+ }
public List<ScanResult> getResults() {
- return this.state.getSnapshotOfScanResults();
+ return this.state.getCopyOfResults();
}
public int getPeakConcurrentConnects() {
- return this.state.getCounter().max();
+ return counter.max();
+ }
+
+ public static Scan create(ScanOptions options) {
+ if (options.hostsFile() != null) {
+ return create(options.hostsFile(), options.ports(), options.quiet());
+ }
+ return create(options.hostsArgv(), options.ports(), options.quiet());
+ }
+
+ public static Scan create(String sourceFile, String ports, boolean quiet) {
+ try (BufferedReader reader = Files.newBufferedReader(Path.of(sourceFile))) {
+ return create(reader.lines().toList(), ports, quiet);
+ } catch (FileNotFoundException | NoSuchFileException e) {
+ System.out.printf("Could not open file %s%n", sourceFile);
+ } catch (IOException e) {
+ System.out.printf("Error while trying to read hosts: %s -> %s %n", e.getClass().getSimpleName(), e.getMessage());
+ }
+
+ return null;
+ }
+
+ public static Scan create(List<String> hostsArgv, String ports, boolean quiet) {
+ return new Scan(hostsArgv, ports, new ScanState(), quiet);
+ }
+
+ public List<String> getHosts() {
+ return hosts;
+ }
+
+ public String getPorts() {
+ return ports;
+ }
+
+ public void start() {
+ progressBar.start();
+ }
+
+ public void stop() {
+ progressBar.stop();
+ }
+
+ public void addHostProgress(Progress progress) {
+ progressBar.add(progress);
+ }
+
+ public void incSocketCounter() {
+ counter.inc();
+ }
+
+ public void decSocketCounter() {
+ counter.dec();
+ }
+
+ public void addScanResult(ScanResult scanResult) {
+ state.addScanResult(scanResult);
}
}