summaryrefslogtreecommitdiff
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/it_jaros/networkScanner/ProgressBar.java9
-rw-r--r--src/main/java/com/it_jaros/networkScanner/Scanner.java42
2 files changed, 31 insertions, 20 deletions
diff --git a/src/main/java/com/it_jaros/networkScanner/ProgressBar.java b/src/main/java/com/it_jaros/networkScanner/ProgressBar.java
index 044f683..2537d9f 100644
--- a/src/main/java/com/it_jaros/networkScanner/ProgressBar.java
+++ b/src/main/java/com/it_jaros/networkScanner/ProgressBar.java
@@ -14,10 +14,8 @@ public class ProgressBar {
private ReentrantLock lock = new ReentrantLock();
public void start() {
- System.out.println("Progress:");
this.hosts = new ArrayList<>();
- // move cursor down depending on how many hosts have to be scanned
- System.out.print("\n");
+ System.out.print("Scanning targets...\n\n");
ui.scheduleAtFixedRate(() -> {
lock.lock();
drawProgress(false);
@@ -31,9 +29,10 @@ public class ProgressBar {
drawBar(progress);
}
- // move cursor up again
- if (!last)
+ if (!last) {
+ // move cursor up again
System.out.print("\u001b[" + hosts.size() + "A");
+ }
}
public void submit(Progress progress) {
diff --git a/src/main/java/com/it_jaros/networkScanner/Scanner.java b/src/main/java/com/it_jaros/networkScanner/Scanner.java
index 1bc8848..f5205d5 100644
--- a/src/main/java/com/it_jaros/networkScanner/Scanner.java
+++ b/src/main/java/com/it_jaros/networkScanner/Scanner.java
@@ -43,9 +43,7 @@ public class Scanner {
try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();) {
List<Future<ScanResult>> futures = new ArrayList<>();
for (String target : targets) {
- futures.add(executor.submit(() -> {
- return scanTarget(target, ports);
- }));
+ futures.add(executor.submit(() -> scanTarget(target, ports)));
}
futures.forEach((f) -> {
@@ -64,32 +62,46 @@ public class Scanner {
private ScanResult scanTarget(String target, String ports) {
PortRange portRange = new PortRange(ports);
- AtomicLong scanSlotFactory = new AtomicLong(System.nanoTime());
+ AtomicLong portSlotFactory = new AtomicLong(System.nanoTime());
Queue<Integer> openPorts = new ConcurrentLinkedQueue<>();
Progress progress = new Progress(target, portRange.getTotal(), new AtomicInteger(), new AtomicInteger());
progressBar.submit(progress);
try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();) {
+ List<Future<Integer>> futures = new ArrayList<>();
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();
- }
- });
+ futures.add(executor.submit(() -> scanPort(target, portSlotFactory, currentPort)));
}
+
+ futures.forEach(f -> {
+ try {
+ int port = f.get();
+ if (port != -1) {
+ openPorts.add(port);
+ progress.open().incrementAndGet();
+ }
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ } finally {
+ progress.done().incrementAndGet();
+ }
+ });
}
return new ScanResult(target, openPorts);
}
+ private int scanPort(String target, AtomicLong scanSlotFactory, final int currentPort) {
+ waitForSlot(scanSlotFactory);
+ if (isTargetPortOpen(target, currentPort)) {
+ return currentPort;
+ }
+
+ return -1;
+ }
+
private void waitForSlot(AtomicLong scanSlotFactory) {
if (delayInNanos > 0) {
long slot = scanSlotFactory.getAndAdd(delayInNanos);