summaryrefslogtreecommitdiff
path: root/src/main/java/com/it_jaros/network_scanner/CliParser.java
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-03-16 16:41:25 +0100
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-07-09 09:59:28 +0200
commit7946b8aae3427b180d28441f8a02ae6665ac215c (patch)
treef10deda6e765715a68d37981a5ab0a6c73744dc6 /src/main/java/com/it_jaros/network_scanner/CliParser.java
parent98a62828f7305fc3a2a36a9b19f0ae98ce78904b (diff)
Renamed package
Diffstat (limited to 'src/main/java/com/it_jaros/network_scanner/CliParser.java')
-rw-r--r--src/main/java/com/it_jaros/network_scanner/CliParser.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/main/java/com/it_jaros/network_scanner/CliParser.java b/src/main/java/com/it_jaros/network_scanner/CliParser.java
new file mode 100644
index 0000000..84fa8dc
--- /dev/null
+++ b/src/main/java/com/it_jaros/network_scanner/CliParser.java
@@ -0,0 +1,80 @@
+package com.it_jaros.network_scanner;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class CliParser {
+
+ public ScanOptions parseArgs(String[] args) {
+ if (args.length < 1 || args[0].trim().equals("")) {
+ throw new IllegalArgumentException("No argument given");
+ }
+
+ Set<String> targets = new HashSet<>();
+ int socketLimit = 1000;
+ int delayInMillis = 0;
+ int timeoutInMillis = 1000;
+ int maxWorkersPerHost = 1000;
+ String ports = "1-1024";
+ for (int i = 0; i < args.length; i++) {
+ final String currentArg = args[i];
+ if (!currentArg.startsWith("-")) {
+ targets.add(currentArg);
+ continue;
+ }
+
+ try {
+ switch (currentArg) {
+ case "--help", "-h":
+ usageAndExit();
+ break;
+ case "--socketLimit", "-sl":
+ socketLimit = Integer.parseInt(args[++i]);
+ break;
+ case "--delay", "-d":
+ delayInMillis = Integer.parseInt(args[++i]);
+ break;
+ case "--timeout", "-t":
+ timeoutInMillis = Integer.parseInt(args[++i]);
+ break;
+ case "--maxWorkersPerHost", "-wh":
+ maxWorkersPerHost = Integer.parseInt(args[++i]);
+ break;
+ case "--ports", "-p":
+ ports = args[++i];
+ break;
+ default:
+ throw new IllegalArgumentException("No such param " + currentArg);
+ }
+ } catch (IndexOutOfBoundsException | NumberFormatException e) {
+ System.out.printf("Missing or wrong argument for option %s", currentArg);
+ System.exit(2);
+ }
+ }
+
+ System.out.printf(
+ "Parsed arguments: targets('%s'), ports(%s), socketLimit(%s), delayInMillis(%s), timeoutInMillis(%s), maxWorkersPerHost(%s)%n",
+ targets, ports, socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost);
+
+ return new ScanOptions(targets.stream().toList(), socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, ports);
+ }
+
+ public void usageAndExit() {
+ System.err.println("""
+ Usage:
+ java -jar scanner.jar [OPTIONS] <host>
+
+ Options:
+ --delay, -d: Waiting period in millis for connection attempts for a host; (Default: 0)
+ --socketLimit, -sl: Socket Connection limit for a host; (Default: 1000)
+ --timeout, -t: Timeout per connection attempt, 0 means infinite: (Default: 1000)
+ --ports, -p: Ports to be scanned
+ --maxWorkersPerHost, -wh: Virtual Worker Threads run per target. Higher doesn't mean necessarily faster. But the more you use the more RAM is required. (Default: 1000)
+
+ Examples:
+ java -jar scanner.jar localhost
+ java -jar scanner.jar fd00::1
+ """);
+ System.exit(1);
+ }
+}