From f5e5e45fec284192710ee95af4409ac572fc4127 Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Thu, 2 Jul 2026 14:12:28 +0200 Subject: Finally i managed to print also intermediate results when stopping process from running with strg-c --- src/main/java/com/it_jaros/jscanner/App.java | 53 ++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 14 deletions(-) (limited to 'src/main/java/com/it_jaros/jscanner/App.java') 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 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 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; } -- cgit v1.3.1