summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/it_jaros/jscanner/PortResult.java6
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scanner.java11
-rw-r--r--src/main/java/com/it_jaros/jscanner/ServiceDetector.java8
3 files changed, 13 insertions, 12 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/PortResult.java b/src/main/java/com/it_jaros/jscanner/PortResult.java
index be2e119..f246302 100644
--- a/src/main/java/com/it_jaros/jscanner/PortResult.java
+++ b/src/main/java/com/it_jaros/jscanner/PortResult.java
@@ -5,7 +5,7 @@ import java.io.IOException;
public class PortResult {
private int port;
private PortState state;
- private String banner;
+ private byte[] banner;
private Exception exception;
public int getPort() {
@@ -24,11 +24,11 @@ public class PortResult {
this.state = state;
}
- public String getBanner() {
+ public byte[] getBanner() {
return banner;
}
- public void setBanner(String banner) {
+ public void setBanner(byte[] banner) {
this.banner = banner;
}
diff --git a/src/main/java/com/it_jaros/jscanner/Scanner.java b/src/main/java/com/it_jaros/jscanner/Scanner.java
index 079c6aa..fdd011e 100644
--- a/src/main/java/com/it_jaros/jscanner/Scanner.java
+++ b/src/main/java/com/it_jaros/jscanner/Scanner.java
@@ -5,7 +5,6 @@ import java.io.IOException;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
-import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.*;
@@ -399,9 +398,9 @@ public class Scanner implements AutoCloseable {
return result;
}
- private String getBanner(SocketChannel socketChannel) {
+ private byte[] getBanner(SocketChannel socketChannel) {
try {
- return readBannerFrom(socketChannel);
+ return tryReadFrom(socketChannel);
} catch (IOException ignore) {
// ignore
}
@@ -409,12 +408,12 @@ public class Scanner implements AutoCloseable {
return null;
}
- private String readBannerFrom(SocketChannel socketChannel) throws IOException {
+ private byte[] tryReadFrom(SocketChannel socketChannel) throws IOException {
byte[] buffer = new byte[READ_BUFFER_SIZE];
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- long deadlineNanos = System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(timeoutInMillis);
boolean timedout = false;
+ long deadlineNanos = System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(timeoutInMillis);
while (!timedout) {
int bytesRead = socketChannel.read(ByteBuffer.wrap(buffer));
if (bytesRead == -1) {
@@ -430,7 +429,7 @@ public class Scanner implements AutoCloseable {
LockSupport.parkNanos(Math.min(remaining, TimeUnit.MILLISECONDS.toNanos(1000)));
}
}
- return byteArrayOutputStream.toString(StandardCharsets.UTF_8).trim();
+ return byteArrayOutputStream.toByteArray();
}
}
diff --git a/src/main/java/com/it_jaros/jscanner/ServiceDetector.java b/src/main/java/com/it_jaros/jscanner/ServiceDetector.java
index 425372c..4d4f76e 100644
--- a/src/main/java/com/it_jaros/jscanner/ServiceDetector.java
+++ b/src/main/java/com/it_jaros/jscanner/ServiceDetector.java
@@ -1,5 +1,6 @@
package com.it_jaros.jscanner;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.regex.Pattern;
@@ -20,13 +21,14 @@ public class ServiceDetector {
new ServicePattern(ServiceType.SSH, Pattern.compile("(?i)^SSH-"))
);
- public static ServiceType detect(String banner) {
- if (banner == null || banner.isBlank()) {
+ public static ServiceType detect(byte[] banner) {
+ if (banner == null || banner.length == 0) {
return ServiceType.UNKNOWN;
}
+ String bannerString = new String(banner, StandardCharsets.UTF_8);
for (ServicePattern servicePattern : patterns) {
- if (servicePattern.matches(banner)) {
+ if (servicePattern.matches(bannerString)) {
return servicePattern.serviceType();
}
}