jscanner

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 76baa932a90a65c5666b6358af81a89bdc3ca47e
parent 8b9a77ec8c00a5a92e37678b98774b4f180ba38e
Author: Matthias Jaros <jaros@mailbox.org>
Date:   Mon, 23 Mar 2026 16:19:04 +0100

Added host online check

Diffstat:
Msrc/main/java/com/it_jaros/network_scanner/CliDefaults.java | 2+-
Msrc/main/java/com/it_jaros/network_scanner/Scanner.java | 18+++++++++++++++++-
2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/it_jaros/network_scanner/CliDefaults.java b/src/main/java/com/it_jaros/network_scanner/CliDefaults.java @@ -5,7 +5,7 @@ public class CliDefaults { public static final int DELAY_IN_MILLIS = 0; public static final int TIMEOUT_IN_MILLIS = 300; public static final int MAX_WORKERS_PER_HOST = 1000; - public static final int MAX_TARGETS_LIMIT = 3; + public static final int MAX_TARGETS_LIMIT = 10; public static final String PORTS = "1-1024"; public static final boolean SHOW_FILTERED_PORTS = false; } diff --git a/src/main/java/com/it_jaros/network_scanner/Scanner.java b/src/main/java/com/it_jaros/network_scanner/Scanner.java @@ -76,9 +76,15 @@ public class Scanner { BitSet openPorts = new BitSet(PortRange.MAX_PORT); BitSet filteredPorts = new BitSet(PortRange.MAX_PORT); - Progress progress = new Progress(target, portRange.getTotal(), new AtomicInteger(), new AtomicInteger(), new AtomicInteger() ); + Progress progress = new Progress(target, portRange.getTotal(), new AtomicInteger(), new AtomicInteger(), new AtomicInteger()); progressBar.submit(progress); + if(!checkHostOnline(target)) { + // Visually show that this host is basically done + progress.done().set(progress.total()); + return new ScanResult(target, openPorts, filteredPorts); + } + try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { List<Future<PortResult>> futures = new ArrayList<>(); while (portRange.hasNext()) { @@ -127,6 +133,16 @@ public class Scanner { return new ScanResult(target, openPorts, filteredPorts); } + private boolean checkHostOnline(String target) { + try { + return InetAddress.getByName(target).isReachable(2000); + } catch (IOException e) { + // something went wrong + } + + return false; + } + private void waitForSlot(AtomicLong scanSlotFactory) { if (delayInNanos > 0) { long slot = scanSlotFactory.getAndAdd(delayInNanos);