diff --git a/README.md b/README.md
index 07c2d8c5..a9fd4908 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,9 @@
[](https://www.codacy.com/app/aaronjwood/PortAuthority)
-[](https://travis-ci.org/aaronjwood/PortAuthority)
+[](https://travis-ci.org/aaronjwood/PortAuthority)
[](https://scan.coverity.com/projects/aaronjwood-portauthority)
+[](https://snyk.io/test/github/aaronjwood/PortAuthority)
## Overview
diff --git a/app/build.gradle b/app/build.gradle
index a1ea44f7..3f0f5944 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,8 +21,8 @@ android {
defaultConfig {
minSdkVersion 14
targetSdkVersion 29
- versionCode 57
- versionName "2.2.12"
+ versionCode 58
+ versionName "2.2.13"
applicationId "com.aaronjwood.portauthority"
setProperty("archivesBaseName", "PortAuthority-$versionName")
}
@@ -35,12 +35,13 @@ android {
buildTypes {
debug {
minifyEnabled false
- useProguard false
}
release {
minifyEnabled true
shrinkResources true
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard.pro'
+ proguardFiles getDefaultProguardFile(
+ 'proguard-android-optimize.txt'),
+ 'proguard-rules.pro'
}
}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 00000000..324bf947
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1 @@
+-keep class org.xbill.** { *; }
diff --git a/app/proguard.pro b/app/proguard.pro
deleted file mode 100644
index 0b7eb396..00000000
--- a/app/proguard.pro
+++ /dev/null
@@ -1,5 +0,0 @@
--dontwarn okhttp3.**
--dontwarn okio.**
--dontwarn javax.annotation.**
-# A resource is loaded with a relative path so the package of this class must be preserved.
--keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
diff --git a/app/src/main/java/com/aaronjwood/portauthority/activity/HostActivity.java b/app/src/main/java/com/aaronjwood/portauthority/activity/HostActivity.java
index 14375f2b..784c3ddd 100644
--- a/app/src/main/java/com/aaronjwood/portauthority/activity/HostActivity.java
+++ b/app/src/main/java/com/aaronjwood/portauthority/activity/HostActivity.java
@@ -32,7 +32,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
public abstract class HostActivity extends AppCompatActivity implements HostAsyncResponse {
diff --git a/app/src/main/java/com/aaronjwood/portauthority/async/ScanHostsAsyncTask.java b/app/src/main/java/com/aaronjwood/portauthority/async/ScanHostsAsyncTask.java
index 8412a769..499a394d 100644
--- a/app/src/main/java/com/aaronjwood/portauthority/async/ScanHostsAsyncTask.java
+++ b/app/src/main/java/com/aaronjwood/portauthority/async/ScanHostsAsyncTask.java
@@ -18,7 +18,6 @@
import java.lang.ref.WeakReference;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
@@ -149,7 +148,7 @@ protected final void onProgressUpdate(Void... params) {
throw new Exception("Unable to access ARP entries");
}
- reader = new BufferedReader(new InputStreamReader(ipProc.getInputStream()));
+ reader = new BufferedReader(new InputStreamReader(ipProc.getInputStream(), "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
String[] neighborLine = line.split("\\s+");
@@ -175,7 +174,7 @@ protected final void onProgressUpdate(Void... params) {
}
}
} else {
- reader = new BufferedReader(new InputStreamReader(new FileInputStream(ARP_TABLE), StandardCharsets.UTF_8));
+ reader = new BufferedReader(new InputStreamReader(new FileInputStream(ARP_TABLE), "UTF-8"));
reader.readLine(); // Skip header.
String line;
diff --git a/app/src/main/java/com/aaronjwood/portauthority/runnable/ScanPortsRunnable.java b/app/src/main/java/com/aaronjwood/portauthority/runnable/ScanPortsRunnable.java
index e1c52b20..39ddd14b 100644
--- a/app/src/main/java/com/aaronjwood/portauthority/runnable/ScanPortsRunnable.java
+++ b/app/src/main/java/com/aaronjwood/portauthority/runnable/ScanPortsRunnable.java
@@ -13,7 +13,6 @@
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.channels.IllegalBlockingModeException;
-import java.nio.charset.StandardCharsets;
public class ScanPortsRunnable implements Runnable {
private String ip;
@@ -66,12 +65,12 @@ public void run() {
SparseArray portData = new SparseArray<>();
String data = null;
try {
- InputStreamReader input = new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8);
+ InputStreamReader input = new InputStreamReader(socket.getInputStream(), "UTF-8");
BufferedReader buffered = new BufferedReader(input);
if (i == 22) {
data = parseSSH(buffered);
} else if (i == 80 || i == 443 || i == 8080) {
- PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8), true);
+ PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"), true);
data = parseHTTP(buffered, out);
}
} catch (IOException e) {
@@ -115,9 +114,13 @@ private String parseSSH(BufferedReader reader) throws IOException {
private String parseHTTP(BufferedReader reader, PrintWriter writer) throws IOException {
writer.println("GET / HTTP/1.1\r\nHost: " + ip + "\r\n");
char[] buffer = new char[256];
- reader.read(buffer, 0, buffer.length);
+ int bytesRead = reader.read(buffer, 0, buffer.length);
writer.close();
reader.close();
+ if (bytesRead == 0) {
+ return null;
+ }
+
String data = new String(buffer).toLowerCase();
if (data.contains("apache") || data.contains("httpd")) {
@@ -132,6 +135,18 @@ private String parseHTTP(BufferedReader reader, PrintWriter writer) throws IOExc
return "NGINX";
}
+ if (data.contains("node")) {
+ return "Node.js";
+ }
+
+ if (data.contains("tomcat")) {
+ return "Tomcat";
+ }
+
+ if (data.contains("litespeed")) {
+ return "LiteSpeed";
+ }
+
return null;
}
}