summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/it_jaros/jns/CliParser.java21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/main/java/com/it_jaros/jns/CliParser.java b/src/main/java/com/it_jaros/jns/CliParser.java
index 11ddef1..5efc30f 100644
--- a/src/main/java/com/it_jaros/jns/CliParser.java
+++ b/src/main/java/com/it_jaros/jns/CliParser.java
@@ -4,6 +4,7 @@ import com.it_jaros.jns.scan.ScanOptions;
import java.util.HashSet;
import java.util.Set;
+import java.util.function.Function;
public class CliParser {
@@ -37,7 +38,7 @@ public class CliParser {
bannerRecognition = true;
break;
case "--delay", "-d":
- delayInMillis = parseIntOption(args, ++i, currentArg);
+ delayInMillis = parseIntOption(args, ++i, currentArg, (Integer value) -> value >= 0);
break;
case "--disableOnlineCheck", "-do":
disableOnlineCheck = true;
@@ -49,10 +50,10 @@ public class CliParser {
hostsFile = getArgument(args, ++i, currentArg);
break;
case "--hostsLimit", "-hl":
- hostsLimit = parseIntOption(args, ++i, currentArg);
+ hostsLimit = parseIntOption(args, ++i, currentArg, (Integer value) -> value > 0);
break;
case "--workersPerHostLimit", "-whl":
- workersPerHostLimit = parseIntOption(args, ++i, currentArg);
+ workersPerHostLimit = parseIntOption(args, ++i, currentArg, (Integer value) -> value > 0);
break;
case "--ports", "-p":
ports = getArgument(args, ++i, currentArg);
@@ -64,10 +65,10 @@ public class CliParser {
showFilteredPorts = true;
break;
case "--socketLimit", "-sl":
- socketLimit = parseIntOption(args, ++i, currentArg);
+ socketLimit = parseIntOption(args, ++i, currentArg, (Integer value) -> value > 0);
break;
case "--timeout", "-t":
- timeoutInMillis = parseIntOption(args, ++i, currentArg);
+ timeoutInMillis = parseIntOption(args, ++i, currentArg, (Integer value) -> value > 0);
break;
default:
throw new IllegalArgumentException("No such param " + currentArg);
@@ -101,10 +102,14 @@ public class CliParser {
return args[index];
}
- private int parseIntOption(String[] args, int index, String option) {
+ private int parseIntOption(String[] args, int index, String option, Function<Integer, Boolean> validator) {
String value = getArgument(args, index, option);
try {
- return Integer.parseInt(value);
+ int parsedValue = Integer.parseInt(value);
+ if (!validator.apply(parsedValue)) {
+ throw new IllegalArgumentException(String.format("Invalid value %s for argument %s", parsedValue, option));
+ }
+ return parsedValue;
} catch (NumberFormatException e) {
throw new IllegalArgumentException(String.format("Invalid argument %s for option %s", value, option));
}
@@ -129,7 +134,7 @@ public class CliParser {
--quiet, -q:\t\t\tDo not output progress bar (Default: %b)
--showFilteredPorts, -sf:\t\tShow also filtered ports (Default: %b)
--socketLimit, -sl:\t\t\tSocket limit in total. You can not scan more ports than allowed here (Default: %d)
- --timeout, -t:\t\t\tTimeout in millis per connection attempt, 0 means infinite (Default: %d)
+ --timeout, -t:\t\t\tTimeout in millis per connection attempt (Default: %d)
""".formatted(CliDefaults.BANNER_RECOGNITION, CliDefaults.DELAY_IN_MILLIS, CliDefaults.DISABLE_HOST_CHECK, CliDefaults.MAX_HOSTS_LIMIT, CliDefaults.MAX_WORKERS_PER_HOST, CliDefaults.PORTS, CliDefaults.QUIET, CliDefaults.SHOW_FILTERED_PORTS, CliDefaults.SOCKET_LIMIT, CliDefaults.TIMEOUT_IN_MILLIS)
);
usage.append("""