summaryrefslogtreecommitdiff
path: root/src/main/java/com/it_jaros/network_scanner/Scanner.java
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-03-30 12:20:33 +0200
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-07-09 09:59:28 +0200
commit604417d8b2842e3683b69ee2635f7a366a96446b (patch)
tree0d8dae2e1347c3f296f0cccb27fa74cb79c41f7b /src/main/java/com/it_jaros/network_scanner/Scanner.java
parent1c513a77cce01342f3c1785f0b7da86effecb8df (diff)
Refactored cli option parsing and added -file option. Refactored reading
of hosts to have less redundancy.
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.java35
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 {