summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-08-21 18:25:32 +0200
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-08-21 20:36:14 +0200
commite047de2a38eebfaf630b93e3c9ba1ac7ef688587 (patch)
tree5f63dcbb4e3fe3a952ce1c004100847d292d49e9 /src/main/java
parentb0f8d9ae7a8e2a327fbc3683eef3e9efb892d43c (diff)
Refactored checkPort method. Seperated error handling code from business
logic
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java57
1 files changed, 31 insertions, 26 deletions
diff --git a/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java b/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java
index 2203db6..1e709d5 100644
--- a/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java
+++ b/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java
@@ -61,31 +61,10 @@ public class ScanPortTask implements Callable<PortResult> {
result.setPort(port);
result.setState(PortState.UNKNOWN);
try(SocketChannel socketChannel = SocketChannel.open()) {
- socketChannel.configureBlocking(false);
- socketChannel.connect(new InetSocketAddress(inetAddress, port));
- final long deadlineNanos = System.nanoTime() + timeoutInNanos;
- final long waitInNanos = TimeUnit.MILLISECONDS.toNanos(1000);
- boolean isConnected = socketChannel.finishConnect();
- while (!cancelledToken.isCancelled() && !isConnected) {
- long remainingNanos = deadlineNanos - System.nanoTime();
- if (remainingNanos <= 0) {
- break;
- }
- LockSupport.parkNanos(Math.min(waitInNanos, remainingNanos));
- isConnected = socketChannel.finishConnect();
- }
-
- if (cancelledToken.isCancelled()) {
- return result;
- }
-
- if (isConnected) {
- result.setState(PortState.OPEN);
- if (bannerRecognition) {
- result.setBanner(getBanner(socketChannel));
- }
- } else {
- result.setState(PortState.FILTERED);
+ PortState state = getPortState(socketChannel);
+ result.setState(state);
+ if (PortState.OPEN.equals(state) && bannerRecognition) {
+ result.setBanner(getBanner(socketChannel));
}
} catch (ConnectException ignored) {
result.setState(PortState.CLOSED);
@@ -96,6 +75,32 @@ public class ScanPortTask implements Callable<PortResult> {
return result;
}
+ private PortState getPortState(SocketChannel socketChannel) throws IOException {
+ socketChannel.configureBlocking(false);
+ socketChannel.connect(new InetSocketAddress(inetAddress, port));
+ final long deadlineNanos = System.nanoTime() + timeoutInNanos;
+ final long waitInNanos = TimeUnit.MILLISECONDS.toNanos(1000);
+ boolean isConnected = socketChannel.finishConnect();
+ while (!cancelledToken.isCancelled() && !isConnected) {
+ long remainingNanos = deadlineNanos - System.nanoTime();
+ if (remainingNanos <= 0) {
+ break;
+ }
+ LockSupport.parkNanos(Math.min(waitInNanos, remainingNanos));
+ isConnected = socketChannel.finishConnect();
+ }
+
+ if (isConnected) {
+ return PortState.OPEN;
+ }
+
+ if (cancelledToken.isCancelled()) {
+ return PortState.UNKNOWN;
+ }
+
+ return PortState.FILTERED;
+ }
+
private byte[] getBanner(SocketChannel socketChannel) {
try {
return tryReadFrom(socketChannel);
@@ -103,7 +108,7 @@ public class ScanPortTask implements Callable<PortResult> {
// ignore
}
- return null;
+ return new byte[0];
}
private byte[] tryReadFrom(SocketChannel socketChannel) throws IOException {