diff options
| author | 2026-01-26 18:28:17 +0100 | |
|---|---|---|
| committer | 2026-07-09 09:59:28 +0200 | |
| commit | 46bf5d3df637a485c52e8fcd8374c10b4fb585b3 (patch) | |
| tree | 7899d441c50d9364121cb1597dfe49db26321bb7 /src/main/java/com/it_jaros/networkScanner/Scanner.java | |
| parent | f450739603686f10e0e1b0b7da9b9a39dfb999db (diff) | |
Added progress bar :-)
Diffstat (limited to 'src/main/java/com/it_jaros/networkScanner/Scanner.java')
| -rw-r--r-- | src/main/java/com/it_jaros/networkScanner/Scanner.java | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/main/java/com/it_jaros/networkScanner/Scanner.java b/src/main/java/com/it_jaros/networkScanner/Scanner.java index eb3af29..fae1890 100644 --- a/src/main/java/com/it_jaros/networkScanner/Scanner.java +++ b/src/main/java/com/it_jaros/networkScanner/Scanner.java @@ -13,12 +13,14 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.LockSupport; public class Scanner { private final Counter counter = new Counter(); + private final ProgressBar progressBar = new ProgressBar(); private final Semaphore socketCap; private final int timeoutInMillis; @@ -38,22 +40,32 @@ public class Scanner { public List<ScanResult> scanPorts(List<String> targets, int delayInMillis) { List<ScanResult> results = new ArrayList<>(); long delayInNanos = TimeUnit.MILLISECONDS.toNanos(Math.max(0, delayInMillis)); - try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { + try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();) { + List<Progress> hosts = new ArrayList<>(); for (String target : targets) { - results.add(scanTargetAsync(target, delayInNanos, executor)); + Progress progress = new Progress(target, 65535, new AtomicInteger(), new AtomicInteger()); + hosts.add(progress); + results.add(scanTargetAsync(target, delayInNanos, executor, progress)); } + progressBar.start(hosts); } + + progressBar.stop(); System.out.println("Peak concurrent connects: " + counter.max()); return results; } - private ScanResult scanTargetAsync(String target, long delayInNanos, ExecutorService executor) { + private ScanResult scanTargetAsync(String target, long delayInNanos, ExecutorService executor, Progress p) { AtomicLong nextStartNanos = new AtomicLong(System.nanoTime()); Queue<Integer> openPorts = new ConcurrentLinkedQueue<>(); for (int port = 1; port < 65536; port++) { final int currentPort = port; executor.submit(() -> { - scanPortsAsync(target, delayInNanos, nextStartNanos, openPorts, currentPort); + try { + scanPortsAsync(target, delayInNanos, nextStartNanos, openPorts, currentPort); + } finally { + progressBar.onPortFinished(p); + } }); } return new ScanResult(target, openPorts); |
