From 7946b8aae3427b180d28441f8a02ae6665ac215c Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Mon, 16 Mar 2026 16:41:25 +0100 Subject: Renamed package --- .../com/it_jaros/network_scanner/CliParser.java | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/main/java/com/it_jaros/network_scanner/CliParser.java (limited to 'src/main/java/com/it_jaros/network_scanner/CliParser.java') 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 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] + + 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); + } +} -- cgit v1.3.1