diff options
Diffstat (limited to 'src/main/java/com/it_jaros/jscanner/CliParser.java')
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/CliParser.java | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/CliParser.java b/src/main/java/com/it_jaros/jscanner/CliParser.java new file mode 100644 index 0000000..1ab6b22 --- /dev/null +++ b/src/main/java/com/it_jaros/jscanner/CliParser.java @@ -0,0 +1,112 @@ +package com.it_jaros.jscanner; + +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> hostsArgv = new HashSet<>(); + int socketLimit = CliDefaults.SOCKET_LIMIT; + int delayInMillis = CliDefaults.DELAY_IN_MILLIS; + int timeoutInMillis = CliDefaults.TIMEOUT_IN_MILLIS; + int maxWorkersPerHost = CliDefaults.MAX_WORKERS_PER_HOST; + int maxHostsLimit = CliDefaults.MAX_HOSTS_LIMIT; + String ports = CliDefaults.PORTS; + boolean showFilteredPorts = CliDefaults.SHOW_FILTERED_PORTS; + boolean disableHostCheck = CliDefaults.DISABLE_HOST_CHECK; + String hostsFile = null; + + for (int i = 0; i < args.length; i++) { + final String currentArg = args[i]; + if (!currentArg.startsWith("-")) { + hostsArgv.add(currentArg); + continue; + } + + switch (currentArg) { + case "--help", "-h": + usageAndExit(); + break; + case "--socketLimit", "-sl": + socketLimit = parseIntOption(args, ++i, currentArg); + break; + case "--delay", "-d": + delayInMillis = parseIntOption(args, ++i, currentArg); + break; + case "--timeout", "-t": + timeoutInMillis = parseIntOption(args, ++i, currentArg); + break; + case "--maxWorkersPerHost", "-wh": + maxWorkersPerHost = parseIntOption(args, ++i, currentArg); + break; + case "--maxHostsLimit", "-tl": + maxHostsLimit = parseIntOption(args, ++i, currentArg); + break; + case "--ports", "-p": + ports = requireValue(args, ++i, currentArg); + break; + case "--showFilteredPorts", "-sf": + showFilteredPorts = true; + break; + case "--disableHostCheck", "-dt": + disableHostCheck = true; + break; + case "--file", "-f": + hostsFile = requireValue(args, ++i, currentArg); + break; + default: + throw new IllegalArgumentException("No such param " + currentArg); + } + } + + System.out.printf( + "Parsed arguments: hostsArgv('%s'), ports(%s), socketLimit(%s), delayInMillis(%s), timeoutInMillis(%s), maxWorkersPerHost(%s), maxTargetsLimit(%s), showFilteredPorts(%s), disableTargetCheck(%s), file(%s) %n", + hostsArgv, ports, socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxHostsLimit, showFilteredPorts, disableHostCheck, hostsFile); + + return new ScanOptions(hostsArgv.stream().toList(), socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxHostsLimit, ports, showFilteredPorts, disableHostCheck, hostsFile); + } + + private String requireValue(String[] args, int index, String option) { + if (index >= args.length) { + throw new IllegalArgumentException(String.format("Missing argument for option %s", option)); + } + return args[index]; + } + + private int parseIntOption(String[] args, int index, String option) { + String value = requireValue(args, index, option); + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + throw new IllegalArgumentException(String.format("Invalid argument %s for option %s", value, option)); + } + } + + public void usageAndExit() { + System.err.println(""" + Usage: + java -jar scanner.jar [OPTIONS] <host> + + Options: + --delay, -d:\t\tWaiting period in millis for connection attempts for a host (Default: 0) + --socketLimit, -sl:\t\tSocket Connection limit for a host (Default: 1000) + --timeout, -t:\t\tTimeout per connection attempt, 0 means infinite (Default: 1000) + --ports, -p:\t\tPorts to be scanned + --maxWorkersPerHost, -wh:\tVirtual Worker Threads run per Host. Higher doesn't mean necessarily faster. But the more you use the more RAM is required (Default: 1000) + --maxHostsLimit, -tl:\tMax number of Hosts that are scanned at the same time (Default: 10) + --showFilteredPorts, -sf:\tShow also filtered ports + --disableHostCheck, -dt:\tDon't check if Host is reachable + --file, -f:\t\t\tRead hosts to scan from file instead of stdin + + Examples: + java -jar scanner.jar localhost + java -jar scanner.jar fd00::1 + """); + System.exit(1); + } +} |
