diff options
Diffstat (limited to 'src/main/java/com/it_jaros/network_scanner/Scanner.java')
| -rw-r--r-- | src/main/java/com/it_jaros/network_scanner/Scanner.java | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/src/main/java/com/it_jaros/network_scanner/Scanner.java b/src/main/java/com/it_jaros/network_scanner/Scanner.java index d70a446..0969c5a 100644 --- a/src/main/java/com/it_jaros/network_scanner/Scanner.java +++ b/src/main/java/com/it_jaros/network_scanner/Scanner.java @@ -1,7 +1,12 @@ package com.it_jaros.network_scanner; +import java.io.BufferedReader; +import java.io.FileNotFoundException; import java.io.IOException; import java.net.*; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; import java.util.ArrayList; import java.util.BitSet; import java.util.List; @@ -9,6 +14,7 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.LockSupport; +import java.util.stream.Stream; public class Scanner { @@ -31,16 +37,41 @@ public class Scanner { } public List<ScanResult> scan(ScanOptions options) { + if (options.file() != null) { + return scanHosts(options.file(), options.ports()); + } return scanHosts(options.targetHosts(), options.ports()); } + public List<ScanResult> scanHosts(String sourceFile, String ports) { + try (BufferedReader reader = Files.newBufferedReader(Path.of(sourceFile))) { + return scanHosts(reader.lines(), ports); + } catch (FileNotFoundException | NoSuchFileException e) { + System.out.printf("Could not open file %s%n", sourceFile); + } catch (IOException e) { + System.out.printf("Error while trying to read hosts: %s -> %s %n", e.getClass().getSimpleName(), e.getMessage()); + } + + return List.of(); + } + public List<ScanResult> scanHosts(List<String> targetHosts, String ports) { + try (Stream<String> stream = targetHosts.stream()){ + return scanHosts(stream, ports); + } catch (IOException e) { + System.out.printf("Error while trying to read hosts: %s -> %s %n", e.getClass().getSimpleName(), e.getMessage()); + } + + return List.of(); + } + + public List<ScanResult> scanHosts(Stream<String> hosts, String ports) throws IOException { List<ScanResult> results = new ArrayList<>(); progressBar.start(); try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { List<Future<ScanResult>> futures = new ArrayList<>(); Semaphore maxHosts = new Semaphore(maxHostsLimit); - for (String host : targetHosts) { + hosts.forEach((final String host) -> { maxHosts.acquireUninterruptibly(); futures.add(executor.submit(() -> { try { @@ -49,7 +80,7 @@ public class Scanner { maxHosts.release(); } })); - } + }); futures.forEach((Future<ScanResult> f) -> { try { |
