diff options
Diffstat (limited to 'src/main/java/com/it_jaros/jscanner/App.java')
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/App.java | 53 |
1 files changed, 39 insertions, 14 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/App.java b/src/main/java/com/it_jaros/jscanner/App.java index 119c42d..c021821 100644 --- a/src/main/java/com/it_jaros/jscanner/App.java +++ b/src/main/java/com/it_jaros/jscanner/App.java @@ -9,28 +9,41 @@ public class App { private static Thread shutdownHook; public static void main(String[] args) { - CliParser cliParser = new CliParser(); + // just in case catch everything + try { + ScanOptions options = parseOptions(args); + if (options == null) return; + try (Scanner scanner = new Scanner(options)) { + Scan scan = scanner.createScan(options); + addShutdownHook(scan, scanner, options); + printScanResults(scanner.runScan(scan), scan.state(), options); + } finally { + removeShutdownHook(); + } + } catch (Exception e) { + System.out.printf("ERROR: %s", e.getMessage()); + } + } + + private static ScanOptions parseOptions(String[] args) { + CliParser cliParser = new CliParser(); try { - ScanOptions options = cliParser.parseArgs(args); - Scanner scanner = new Scanner(options); - addShutdownHook(scanner, options.showFilteredPorts()); - printResults(scanner.scan(options), options.showFilteredPorts()); + return cliParser.parseArgs(args); } catch (IllegalArgumentException e) { System.out.printf("Error while parsing arguments: %s", e.getMessage()); System.out.println(); - cliParser.usageAndExit(); - } catch (Exception e) { - System.out.printf("ERROR: %s", e.getMessage()); - } finally { - removeShutdownHook(); } + + cliParser.usageAndExit(1); + return null; } - private static void addShutdownHook(Scanner scanner, boolean showFilteredPorts) { + private static void addShutdownHook(Scan scan, Scanner scanner, ScanOptions scanOptions) { shutdownHook = new Thread(() -> { System.err.println("\nCtrl-C received."); scanner.cancel(); + printScanIntermediateResult(scan, scanOptions); }); Runtime.getRuntime().addShutdownHook(shutdownHook); } @@ -47,11 +60,23 @@ public class App { } } - public static void printResults(List<ScanResult> results, boolean showFilteredPorts) { - results.forEach((ScanResult r) -> printResult(r, showFilteredPorts)); + public static void printScanIntermediateResult(Scan scan, ScanOptions scanOptions) { + printScanResults(scan.state().getSnapshotOfScanResults(), scan.state(), scanOptions); + } + + private static void printScanResults(List<ScanResult> result, ScanState state, ScanOptions options) { + printStats(state); + result.forEach((ScanResult r) -> printPortsResults(r, options.showFilteredPorts())); + } + + private static void printStats(ScanState state) { + System.out.println("--------------------"); + System.out.println("Stats:"); + System.out.println("Peak concurrent connects: " + state.getCounter().max()); + System.out.println("--------------------"); } - private static void printResult(ScanResult result, boolean showFilteredPorts) { + private static void printPortsResults(ScanResult result, boolean showFilteredPorts) { if (result.openPorts().isEmpty() && (!showFilteredPorts || result.filteredPorts().isEmpty())) { return; } |
