From 460ea9b7fac7e549c8981c44e35203ed89f21270 Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Tue, 18 Aug 2026 13:37:47 +0200 Subject: Validate portrange already in cli parser instead of printing an error message for every host that tries to parse the specified ports --- src/main/java/com/it_jaros/jns/CliParser.java | 11 +++++++++-- src/main/java/com/it_jaros/jns/scan/domain/PortRange.java | 6 +++--- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main/java/com/it_jaros/jns/CliParser.java b/src/main/java/com/it_jaros/jns/CliParser.java index 5efc30f..191dd29 100644 --- a/src/main/java/com/it_jaros/jns/CliParser.java +++ b/src/main/java/com/it_jaros/jns/CliParser.java @@ -1,6 +1,7 @@ package com.it_jaros.jns; import com.it_jaros.jns.scan.ScanOptions; +import com.it_jaros.jns.scan.domain.PortRange; import java.util.HashSet; import java.util.Set; @@ -56,7 +57,7 @@ public class CliParser { workersPerHostLimit = parseIntOption(args, ++i, currentArg, (Integer value) -> value > 0); break; case "--ports", "-p": - ports = getArgument(args, ++i, currentArg); + ports = getArgumentAndValidate(args, ++i, currentArg, PortRange::new); break; case "--quiet", "-q": quiet = true; @@ -68,7 +69,7 @@ public class CliParser { socketLimit = parseIntOption(args, ++i, currentArg, (Integer value) -> value > 0); break; case "--timeout", "-t": - timeoutInMillis = parseIntOption(args, ++i, currentArg, (Integer value) -> value > 0); + timeoutInMillis = parseIntOption(args, ++i, currentArg, (Integer value) -> value > 0); break; default: throw new IllegalArgumentException("No such param " + currentArg); @@ -95,6 +96,12 @@ public class CliParser { ); } + private String getArgumentAndValidate(String[] args, int index, String option, Function validator) { + String arg = getArgument(args, index, option); + validator.apply(arg); + return arg; + } + private String getArgument(String[] args, int index, String option) { if (index >= args.length) { throw new IllegalArgumentException(String.format("Missing argument for option %s", option)); diff --git a/src/main/java/com/it_jaros/jns/scan/domain/PortRange.java b/src/main/java/com/it_jaros/jns/scan/domain/PortRange.java index 2f8bab8..290ca8e 100644 --- a/src/main/java/com/it_jaros/jns/scan/domain/PortRange.java +++ b/src/main/java/com/it_jaros/jns/scan/domain/PortRange.java @@ -13,7 +13,7 @@ public class PortRange { public PortRange(String ports) { if (ports == null || "".equals(ports)) { - specifiedPorts.set(MIN_PORT, 1024); + specifiedPorts.set(MIN_PORT, 1024 + 1); } else if ("all".equalsIgnoreCase(ports)) { specifiedPorts.set(MIN_PORT, MAX_PORT + 1); } else { @@ -56,9 +56,9 @@ public class PortRange { checkValue(start); checkValue(end); - if (start >= end) { + if (start > end) { throw new IllegalArgumentException( - String.format("Start value cannot be equal or bigger than end value '%s >= %s'", start, end)); + String.format("Start value cannot be equal or bigger than end value '%s > %s'", start, end)); } } -- cgit v1.3.1