jscanner

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

commit b21d3af5e24faa4e5182cfbd408fd4d2a8eb1a32
parent 76baa932a90a65c5666b6358af81a89bdc3ca47e
Author: Matthias Jaros <jaros@mailbox.org>
Date:   Mon, 23 Mar 2026 16:37:13 +0100

Added cli option for online check

Diffstat:
Msrc/main/java/com/it_jaros/network_scanner/App.java | 2+-
Msrc/main/java/com/it_jaros/network_scanner/CliDefaults.java | 1+
Msrc/main/java/com/it_jaros/network_scanner/CliParser.java | 11++++++++---
Msrc/main/java/com/it_jaros/network_scanner/ScanOptions.java | 2+-
Msrc/main/java/com/it_jaros/network_scanner/Scanner.java | 8+++++---
5 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/it_jaros/network_scanner/App.java b/src/main/java/com/it_jaros/network_scanner/App.java @@ -10,7 +10,7 @@ public class App { try { ScanOptions options = cliParser.parseArgs(args); Scanner scanner = new Scanner(options.openSocketLimit(), options.timeoutInMillis(), - options.delayInMillis(), options.maxWorkersPerHost(), options.maxTargetsLimit()); + options.delayInMillis(), options.maxWorkersPerHost(), options.maxTargetsLimit(), options.disableTargetCheck()); printResults(scanner.scan(options), options.showFilteredPorts()); } catch (IllegalArgumentException e) { System.out.printf("Error while parsing arguments: %s", e.getMessage()); diff --git a/src/main/java/com/it_jaros/network_scanner/CliDefaults.java b/src/main/java/com/it_jaros/network_scanner/CliDefaults.java @@ -8,4 +8,5 @@ public class CliDefaults { public static final int MAX_TARGETS_LIMIT = 10; public static final String PORTS = "1-1024"; public static final boolean SHOW_FILTERED_PORTS = false; + public static final boolean DISABLE_TARGET_CHECK = false; } diff --git a/src/main/java/com/it_jaros/network_scanner/CliParser.java b/src/main/java/com/it_jaros/network_scanner/CliParser.java @@ -18,6 +18,7 @@ public class CliParser { int maxTargetsLimit = CliDefaults.MAX_TARGETS_LIMIT; String ports = CliDefaults.PORTS; boolean showFilteredPorts = CliDefaults.SHOW_FILTERED_PORTS; + boolean disableTargetCheck = CliDefaults.SHOW_FILTERED_PORTS; for (int i = 0; i < args.length; i++) { final String currentArg = args[i]; @@ -52,6 +53,9 @@ public class CliParser { case "--showFilteredPorts", "-sf": showFilteredPorts = true; break; + case "--disableTargetCheck", "-dt": + disableTargetCheck = true; + break; default: throw new IllegalArgumentException("No such param " + currentArg); } @@ -62,10 +66,10 @@ public class CliParser { } System.out.printf( - "Parsed arguments: targets('%s'), ports(%s), socketLimit(%s), delayInMillis(%s), timeoutInMillis(%s), maxWorkersPerHost(%s), maxTargetsLimit(%s), showFilteredPorts(%s) %n", - targets, ports, socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxTargetsLimit, showFilteredPorts); + "Parsed arguments: targets('%s'), ports(%s), socketLimit(%s), delayInMillis(%s), timeoutInMillis(%s), maxWorkersPerHost(%s), maxTargetsLimit(%s), showFilteredPorts(%s), disableTargetCheck(%s) %n", + targets, ports, socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxTargetsLimit, showFilteredPorts, disableTargetCheck); - return new ScanOptions(targets.stream().toList(), socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxTargetsLimit, ports, showFilteredPorts); + return new ScanOptions(targets.stream().toList(), socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxTargetsLimit, ports, showFilteredPorts, disableTargetCheck); } public void usageAndExit() { @@ -81,6 +85,7 @@ public class CliParser { --maxWorkersPerHost, -wh:\tVirtual Worker Threads run per target. Higher doesn't mean necessarily faster. But the more you use the more RAM is required (Default: 1000) --maxTargetsLimit, -tl:\\tMax number of targets that are scanned at the same time (Default: 10) --showFilteredPorts, -sf:\\\\tShow also filtered ports + --disableTargetCheck, -dt:\\\\\\\\tDon't check if target is reachable Examples: java -jar scanner.jar localhost diff --git a/src/main/java/com/it_jaros/network_scanner/ScanOptions.java b/src/main/java/com/it_jaros/network_scanner/ScanOptions.java @@ -2,4 +2,4 @@ package com.it_jaros.network_scanner; import java.util.List; -public record ScanOptions(List<String> targets, int openSocketLimit, int delayInMillis, int timeoutInMillis, int maxWorkersPerHost, int maxTargetsLimit, String ports, boolean showFilteredPorts) {} +public record ScanOptions(List<String> targets, int openSocketLimit, int delayInMillis, int timeoutInMillis, int maxWorkersPerHost, int maxTargetsLimit, String ports, boolean showFilteredPorts, boolean disableTargetCheck) {} diff --git a/src/main/java/com/it_jaros/network_scanner/Scanner.java b/src/main/java/com/it_jaros/network_scanner/Scanner.java @@ -19,13 +19,15 @@ public class Scanner { private final long delayInNanos; private final int maxWorkersPerHost; private final int maxTargetsLimit; + private final boolean disableTargetCheck; - public Scanner(int socketLimit, int timeoutInMillis, int delayInMillis, int maxWorkersPerHost, int maxTargetsLimit) { + public Scanner(int socketLimit, int timeoutInMillis, int delayInMillis, int maxWorkersPerHost, int maxTargetsLimit, boolean disableTargetCheck) { this.timeoutInMillis = timeoutInMillis; this.delayInNanos = TimeUnit.MILLISECONDS.toNanos(Math.max(0, delayInMillis)); this.socketLimit = new Semaphore(socketLimit); this.maxWorkersPerHost = maxWorkersPerHost; this.maxTargetsLimit = maxTargetsLimit; + this.disableTargetCheck = disableTargetCheck; } public List<ScanResult> scan(ScanOptions target) { @@ -79,7 +81,7 @@ public class Scanner { Progress progress = new Progress(target, portRange.getTotal(), new AtomicInteger(), new AtomicInteger(), new AtomicInteger()); progressBar.submit(progress); - if(!checkHostOnline(target)) { + if(!disableTargetCheck && !checkHostOnline(target)) { // Visually show that this host is basically done progress.done().set(progress.total()); return new ScanResult(target, openPorts, filteredPorts); @@ -135,7 +137,7 @@ public class Scanner { private boolean checkHostOnline(String target) { try { - return InetAddress.getByName(target).isReachable(2000); + return InetAddress.getByName(target).isReachable(timeoutInMillis); } catch (IOException e) { // something went wrong }