From 46bf5d3df637a485c52e8fcd8374c10b4fb585b3 Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Mon, 26 Jan 2026 18:28:17 +0100 Subject: Added progress bar :-) --- .../java/com/it_jaros/networkScanner/Scanner.java | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/main/java/com/it_jaros/networkScanner/Scanner.java') 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 scanPorts(List targets, int delayInMillis) { List results = new ArrayList<>(); long delayInNanos = TimeUnit.MILLISECONDS.toNanos(Math.max(0, delayInMillis)); - try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { + try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();) { + List 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 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); -- cgit v1.3.1