summaryrefslogtreecommitdiff
path: root/src/main/java/com/it_jaros/networkScanner/Scanner.java
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-01-26 17:50:02 +0100
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-07-09 09:59:28 +0200
commitf450739603686f10e0e1b0b7da9b9a39dfb999db (patch)
tree50f9bc6f91c598d8781eeae5f9966d7db63a0b48 /src/main/java/com/it_jaros/networkScanner/Scanner.java
parent70c697d849c55c6cba59a20582364dab4486aa85 (diff)
Added timeout to cli options
Diffstat (limited to 'src/main/java/com/it_jaros/networkScanner/Scanner.java')
-rw-r--r--src/main/java/com/it_jaros/networkScanner/Scanner.java54
1 files changed, 32 insertions, 22 deletions
diff --git a/src/main/java/com/it_jaros/networkScanner/Scanner.java b/src/main/java/com/it_jaros/networkScanner/Scanner.java
index b3f7767..eb3af29 100644
--- a/src/main/java/com/it_jaros/networkScanner/Scanner.java
+++ b/src/main/java/com/it_jaros/networkScanner/Scanner.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import java.net.ConnectException;
import java.net.InetSocketAddress;
import java.net.Socket;
+import java.net.SocketTimeoutException;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
@@ -17,14 +18,18 @@ import java.util.concurrent.locks.LockSupport;
public class Scanner {
- private Counter counter = new Counter();
- private Semaphore socketCap;
+ private final Counter counter = new Counter();
+ private final Semaphore socketCap;
+ private final int timeoutInMillis;
- public Scanner(int socketLimit) {
+ public Scanner(int socketLimit, int timeoutInMillis) {
+ this.timeoutInMillis = timeoutInMillis;
socketCap = new Semaphore(socketLimit);
}
- public Scanner() {}
+ public Scanner() {
+ this(1000, 1000);
+ }
public List<ScanResult> scanPorts(ScanOptions target) {
return scanPorts(target.targets(), target.delayInMillis());
@@ -48,26 +53,31 @@ public class Scanner {
for (int port = 1; port < 65536; port++) {
final int currentPort = port;
executor.submit(() -> {
- if (delayInNanos > 0) {
- long mySlot = nextStartNanos.getAndAdd(delayInNanos);
- long wait = mySlot - System.nanoTime();
- if (wait > 0)
- LockSupport.parkNanos(wait);
- }
- socketCap.acquireUninterruptibly();
- counter.inc();
- try (Socket socket = new Socket()) {
- socket.connect(new InetSocketAddress(target, currentPort), 10000);
- openPorts.add(currentPort);
- } catch (ConnectException ignored) {
- } catch (IOException e) {
- System.out.println(e.getClass().getSimpleName() + ": " + e.getMessage());
- } finally {
- counter.dec();
- socketCap.release();
- }
+ scanPortsAsync(target, delayInNanos, nextStartNanos, openPorts, currentPort);
});
}
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);
+ }
+ socketCap.acquireUninterruptibly();
+ counter.inc();
+ try (Socket socket = new Socket()) {
+ socket.connect(new InetSocketAddress(target, currentPort), timeoutInMillis);
+ openPorts.add(currentPort);
+ } catch (ConnectException | SocketTimeoutException ignored) {
+ } catch (IOException e) {
+ System.out.println(e.getClass().getSimpleName() + ": " + e.getMessage());
+ } finally {
+ counter.dec();
+ socketCap.release();
+ }
+ }
}