diff options
| author | 2026-08-12 13:24:27 +0200 | |
|---|---|---|
| committer | 2026-08-12 13:50:46 +0200 | |
| commit | ff14e0fc4e3fe4f5b8a67640d28850064661d7ab (patch) | |
| tree | f141a2d34d902d344207cfbbc6ac614ec1b3840d /src/main/java/com/it_jaros/jscanner/scan/service | |
| parent | 540b09b1a019f95a9322a6d19e8928369bb20fcb (diff) | |
Major refactoring of package structure
Diffstat (limited to 'src/main/java/com/it_jaros/jscanner/scan/service')
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/scan/service/ServiceDetector.java | 47 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/scan/service/ServiceType.java | 5 |
2 files changed, 52 insertions, 0 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/scan/service/ServiceDetector.java b/src/main/java/com/it_jaros/jscanner/scan/service/ServiceDetector.java new file mode 100644 index 0000000..93e05d4 --- /dev/null +++ b/src/main/java/com/it_jaros/jscanner/scan/service/ServiceDetector.java @@ -0,0 +1,47 @@ +package com.it_jaros.jscanner.scan.service; + +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.regex.Pattern; + +public class ServiceDetector { + private static final List<ServicePattern> patterns = List.of( + new ServicePattern(ServiceType.DNS, Pattern.compile("(?i)\\bDNS\\b")), + new ServicePattern(ServiceType.DNS, Pattern.compile("(?i)\\bBIND\\b")), + new ServicePattern(ServiceType.DNS, Pattern.compile("(?i)\\bNSD\\b")), + new ServicePattern(ServiceType.DNS, Pattern.compile("(?i)\\bPowerDNS\\b")), + new ServicePattern(ServiceType.DNS, Pattern.compile("(?i)\\bUnbound\\b")), + new ServicePattern(ServiceType.FTP, Pattern.compile("(?i)^220.*\\bFTP\\b")), + new ServicePattern(ServiceType.HTTP, Pattern.compile("(?i)\\bServer:\\s*")), + new ServicePattern(ServiceType.HTTP, Pattern.compile("(?i)^HTTP/")), + new ServicePattern(ServiceType.IMAP, Pattern.compile("(?i)^\\* OK.*\\bIMAP\\b")), + new ServicePattern(ServiceType.POP3, Pattern.compile("(?i)^\\+OK.*\\bPOP3\\b")), + new ServicePattern(ServiceType.SMTP, Pattern.compile("(?i)^220.*\\bESMTP\\b")), + new ServicePattern(ServiceType.SMTP, Pattern.compile("(?i)^220.*\\bSMTP\\b")), + new ServicePattern(ServiceType.SSH, Pattern.compile("(?i)^SSH-")) + ); + + 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(bannerString)) { + return servicePattern.serviceType(); + } + } + + return ServiceType.UNKNOWN; + } + + private record ServicePattern( + ServiceType serviceType, + Pattern pattern + ) { + boolean matches(String banner) { + return pattern.matcher(banner).find(); + } + } +}
\ No newline at end of file diff --git a/src/main/java/com/it_jaros/jscanner/scan/service/ServiceType.java b/src/main/java/com/it_jaros/jscanner/scan/service/ServiceType.java new file mode 100644 index 0000000..86b282a --- /dev/null +++ b/src/main/java/com/it_jaros/jscanner/scan/service/ServiceType.java @@ -0,0 +1,5 @@ +package com.it_jaros.jscanner.scan.service; + +public enum ServiceType { + HTTP, FTP, SMTP, IMAP, POP3, UNKNOWN, DNS, SSH +} |
