summaryrefslogtreecommitdiff
path: root/src/main/java/com/it_jaros/jscanner/App.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/it_jaros/jscanner/App.java')
-rw-r--r--src/main/java/com/it_jaros/jscanner/App.java53
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;
}