summaryrefslogtreecommitdiff
path: root/src/main/java/com/it_jaros/network_scanner/CliParser.java
diff options
context:
space:
mode:
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.java91
1 files changed, 53 insertions, 38 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
index dd8f82c..89b9c65 100644
--- a/src/main/java/com/it_jaros/network_scanner/CliParser.java
+++ b/src/main/java/com/it_jaros/network_scanner/CliParser.java
@@ -19,6 +19,7 @@ public class CliParser {
String ports = CliDefaults.PORTS;
boolean showFilteredPorts = CliDefaults.SHOW_FILTERED_PORTS;
boolean disableHostCheck = CliDefaults.DISABLE_HOST_CHECK;
+ String file = null;
for (int i = 0; i < args.length; i++) {
final String currentArg = args[i];
@@ -27,49 +28,63 @@ public class CliParser {
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 "--maxHostsLimit", "-tl":
- maxHostsLimit = Integer.parseInt(args[++i]);
- break;
- case "--ports", "-p":
- ports = args[++i];
- break;
- case "--showFilteredPorts", "-sf":
- showFilteredPorts = true;
- break;
- case "--disableHostCheck", "-dt":
- disableHostCheck = true;
- 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);
+ 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":
+ file = requireValue(args, ++i, currentArg);
+ break;
+ default:
+ throw new IllegalArgumentException("No such param " + currentArg);
}
}
System.out.printf(
- "Parsed arguments: targetHosts('%s'), ports(%s), socketLimit(%s), delayInMillis(%s), timeoutInMillis(%s), maxWorkersPerHost(%s), maxTargetsLimit(%s), showFilteredPorts(%s), disableTargetCheck(%s) %n",
- targetHosts, ports, socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxHostsLimit, showFilteredPorts, disableHostCheck);
+ "Parsed arguments: targetHosts('%s'), ports(%s), socketLimit(%s), delayInMillis(%s), timeoutInMillis(%s), maxWorkersPerHost(%s), maxTargetsLimit(%s), showFilteredPorts(%s), disableTargetCheck(%s), file(%s) %n",
+ targetHosts, ports, socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxHostsLimit, showFilteredPorts, disableHostCheck, file);
- return new ScanOptions(targetHosts.stream().toList(), socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxHostsLimit, ports, showFilteredPorts, disableHostCheck);
+ return new ScanOptions(targetHosts.stream().toList(), socketLimit, delayInMillis, timeoutInMillis, maxWorkersPerHost, maxHostsLimit, ports, showFilteredPorts, disableHostCheck, file);
+ }
+
+ 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() {