diff options
| author | 2026-02-22 20:30:46 +0100 | |
|---|---|---|
| committer | 2026-07-09 09:59:28 +0200 | |
| commit | b5f567a7083acf0be5d2aa7c32f3c21781336bf2 (patch) | |
| tree | 06f878c49465d8ee11f8420bb6039cb09758e591 /src/main/java/com/it_jaros/networkScanner/Scanner.java | |
| parent | 6576e5a2cc583bb9f3637ea7aa91ba2305480d83 (diff) | |
Refactored port scan method and fixed open ports indicator
Diffstat (limited to 'src/main/java/com/it_jaros/networkScanner/Scanner.java')
| -rw-r--r-- | src/main/java/com/it_jaros/networkScanner/Scanner.java | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/main/java/com/it_jaros/networkScanner/Scanner.java b/src/main/java/com/it_jaros/networkScanner/Scanner.java index 8dff0ed..8c8fdff 100644 --- a/src/main/java/com/it_jaros/networkScanner/Scanner.java +++ b/src/main/java/com/it_jaros/networkScanner/Scanner.java @@ -46,7 +46,7 @@ public class Scanner { PortRange portsRange = new PortRange(ports); Progress progress = new Progress(target, portsRange.getTotal(), new AtomicInteger(), new AtomicInteger()); hosts.add(progress); - results.add(scanTargetAsync(target, portsRange, delayInNanos, executor, progress)); + results.add(scanTarget(target, portsRange, delayInNanos, executor, progress)); } progressBar.start(hosts); } @@ -56,14 +56,24 @@ public class Scanner { return results; } - private ScanResult scanTargetAsync(String target, PortRange portRange, long delayInNanos, ExecutorService executor, Progress p) { - AtomicLong nextStartNanos = new AtomicLong(System.nanoTime()); + private ScanResult scanTarget(String target, PortRange portRange, long delayInNanos, ExecutorService executor, + Progress p) { + AtomicLong scanSlotFactory = new AtomicLong(System.nanoTime()); Queue<Integer> openPorts = new ConcurrentLinkedQueue<>(); while (portRange.hasNext()) { final int currentPort = portRange.next(); executor.submit(() -> { try { - scanPortsAsync(target, delayInNanos, nextStartNanos, openPorts, currentPort); + if (delayInNanos > 0) { + long mySlot = scanSlotFactory.getAndAdd(delayInNanos); + long wait = mySlot - System.nanoTime(); + if (wait > 0) + LockSupport.parkNanos(wait); + } + if (isTargetPortOpen(target, currentPort)) { + openPorts.add(currentPort); + progressBar.onPortOpen(p); + } } finally { progressBar.onPortFinished(p); } @@ -72,19 +82,12 @@ public class Scanner { return new ScanResult(target, openPorts); } - private void scanPortsAsync(String target, long delayInNanos, AtomicLong nextStartNanos, Queue<Integer> openPorts, - int currentPort) { - if (delayInNanos > 0) { - long mySlot = nextStartNanos.getAndAdd(delayInNanos); - long wait = mySlot - System.nanoTime(); - if (wait > 0) - LockSupport.parkNanos(wait); - } + private boolean isTargetPortOpen(String target, int port) { socketCap.acquireUninterruptibly(); counter.inc(); try (Socket socket = new Socket()) { - socket.connect(new InetSocketAddress(target, currentPort), timeoutInMillis); - openPorts.add(currentPort); + socket.connect(new InetSocketAddress(target, port), timeoutInMillis); + return true; } catch (ConnectException | SocketTimeoutException ignored) { } catch (IOException e) { System.out.println(e.getClass().getSimpleName() + ": " + e.getMessage()); @@ -92,5 +95,7 @@ public class Scanner { counter.dec(); socketCap.release(); } + + return false; } } |
