summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-03-23 16:37:13 +0100
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-07-09 09:59:28 +0200
commitba0c849b95c2752a592b8a6c3c4f9ae3eb5a03f6 (patch)
tree68c01c9dd78413b1fea061a62b2acb05946003dc
parent8b018babbe933558c445ad76bf64eb21102df723 (diff)
Added cli option for online check
-rw-r--r--src/main/java/com/it_jaros/network_scanner/App.java2
-rw-r--r--src/main/java/com/it_jaros/network_scanner/CliDefaults.java1
-rw-r--r--src/main/java/com/it_jaros/network_scanner/CliParser.java11
-rw-r--r--src/main/java/com/it_jaros/network_scanner/ScanOptions.java2
-rw-r--r--src/main/java/com/it_jaros/network_scanner/Scanner.java8
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
index a06b88a..acb29a6 100644
--- 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
index de7bf3d..1a6a3eb 100644
--- 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
index cebd7c4..e60f5f8 100644
--- 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
index 4e48202..c383676 100644
--- 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
index 85cc46a..3d85ec2 100644
--- 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
}