diff options
Diffstat (limited to 'src/main')
4 files changed, 38 insertions, 30 deletions
diff --git a/src/main/java/com/it_jaros/networkScanner/App.java b/src/main/java/com/it_jaros/networkScanner/App.java index ea267d3..6d0292f 100644 --- a/src/main/java/com/it_jaros/networkScanner/App.java +++ b/src/main/java/com/it_jaros/networkScanner/App.java @@ -15,7 +15,7 @@ public class App { System.out.println(e.getMessage()); cliParser.usageAndExit(); } catch (Exception e) { - System.err.println("Something went wrong"); + e.printStackTrace(); } } diff --git a/src/main/java/com/it_jaros/networkScanner/ProgressBar.java b/src/main/java/com/it_jaros/networkScanner/ProgressBar.java index 78920d4..226e774 100644 --- a/src/main/java/com/it_jaros/networkScanner/ProgressBar.java +++ b/src/main/java/com/it_jaros/networkScanner/ProgressBar.java @@ -74,12 +74,4 @@ public class ProgressBar { } catch (InterruptedException ignored) { } } - - void onPortFinished(Progress progress) { - progress.done().incrementAndGet(); - } - - public void onPortOpen(Progress progress) { - progress.open().incrementAndGet(); - } } diff --git a/src/main/java/com/it_jaros/networkScanner/ScanResult.java b/src/main/java/com/it_jaros/networkScanner/ScanResult.java index e29f4ca..92005b6 100644 --- a/src/main/java/com/it_jaros/networkScanner/ScanResult.java +++ b/src/main/java/com/it_jaros/networkScanner/ScanResult.java @@ -2,4 +2,4 @@ package com.it_jaros.networkScanner; import java.util.Queue; -public record ScanResult(String target, Queue<Integer> openPorts, Progress progress) {} +public record ScanResult(String target, Queue<Integer> openPorts) {} diff --git a/src/main/java/com/it_jaros/networkScanner/Scanner.java b/src/main/java/com/it_jaros/networkScanner/Scanner.java index cfef136..b136182 100644 --- a/src/main/java/com/it_jaros/networkScanner/Scanner.java +++ b/src/main/java/com/it_jaros/networkScanner/Scanner.java @@ -9,8 +9,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -37,13 +39,22 @@ public class Scanner { public List<ScanResult> scanTargets(List<String> targets, String ports) { List<ScanResult> results = new ArrayList<>(); + List<Future<ScanResult>> futures = new ArrayList<>(); + progressBar.start(); try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();) { - progressBar.start(); for (String target : targets) { - ScanResult result = scanTargetPorts(target, ports, executor); - results.add(result); - progressBar.submit(result.progress()); + futures.add(executor.submit(() -> { + return scanTargetPorts(target, ports); + })); } + + futures.forEach((f) -> { + try { + results.add(f.get()); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + }); } progressBar.stop(); @@ -51,27 +62,32 @@ public class Scanner { return results; } - private ScanResult scanTargetPorts(String target, String ports, ExecutorService executor) { + private ScanResult scanTargetPorts(String target, String ports) { PortRange portRange = new PortRange(ports); - Progress progress = new Progress(target, portRange.getTotal(), new AtomicInteger(), - new AtomicInteger()); AtomicLong scanSlotFactory = new AtomicLong(System.nanoTime()); Queue<Integer> openPorts = new ConcurrentLinkedQueue<>(); - while (portRange.hasNext()) { - final int currentPort = portRange.next(); - executor.submit(() -> { - try { - waitForSlot(scanSlotFactory); - if (isTargetPortOpen(target, currentPort)) { - openPorts.add(currentPort); - progressBar.onPortOpen(progress); + + Progress progress = new Progress(target, portRange.getTotal(), new AtomicInteger(), new AtomicInteger()); + progressBar.submit(progress); + + try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();) { + while (portRange.hasNext()) { + final int currentPort = portRange.next(); + executor.submit(() -> { + try { + waitForSlot(scanSlotFactory); + if (isTargetPortOpen(target, currentPort)) { + openPorts.add(currentPort); + progress.open().incrementAndGet(); + } + } finally { + progress.done().incrementAndGet(); } - } finally { - progressBar.onPortFinished(progress); - } - }); + }); + } } - return new ScanResult(target, openPorts, progress); + + return new ScanResult(target, openPorts); } private void waitForSlot(AtomicLong scanSlotFactory) { |
