From 8d05b8a56e5f7695d543824f48f7786b4ebc72a4 Mon Sep 17 00:00:00 2001 From: Aaron Wood Date: Sun, 23 Feb 2020 22:08:46 -0800 Subject: [PATCH 1/5] Switch from proguard to R8 --- app/build.gradle | 5 +++-- app/proguard.pro | 5 ----- 2 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 app/proguard.pro diff --git a/app/build.gradle b/app/build.gradle index a1ea44f7..459194ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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.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 From 529f29cf7468beac2e7cdd5b1af29e623b113947 Mon Sep 17 00:00:00 2001 From: Aaron Wood Date: Sun, 23 Feb 2020 22:43:07 -0800 Subject: [PATCH 2/5] Remove unused import --- .../java/com/aaronjwood/portauthority/activity/HostActivity.java | 1 - 1 file changed, 1 deletion(-) 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 { From e22064959feb6ba132069a7b509cebffb33ea06a Mon Sep 17 00:00:00 2001 From: Aaron Wood Date: Sun, 23 Feb 2020 23:18:00 -0800 Subject: [PATCH 3/5] Add snyk badge --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd6dec0a..a9fd4908 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ [![Codacy Badge](https://api.codacy.com/project/badge/grade/74a6e90f803d46a1a39b34daabeb8af1)](https://www.codacy.com/app/aaronjwood/PortAuthority) -[![Build Status](https://travis-ci.org/aaronjwood/PortAuthority.svg?branch=development)](https://travis-ci.org/aaronjwood/PortAuthority) +[![Build Status](https://travis-ci.org/aaronjwood/PortAuthority.svg)](https://travis-ci.org/aaronjwood/PortAuthority) [![Coverity Scan Build Status](https://scan.coverity.com/projects/8687/badge.svg)](https://scan.coverity.com/projects/aaronjwood-portauthority) +[![Known Vulnerabilities](https://snyk.io/test/github/aaronjwood/PortAuthority/badge.svg)](https://snyk.io/test/github/aaronjwood/PortAuthority) ## Overview From e8b9ea55e8bcc5a53ef217541edf1e21fefe4989 Mon Sep 17 00:00:00 2001 From: Aaron Wood Date: Sun, 23 Feb 2020 23:41:12 -0800 Subject: [PATCH 4/5] Don't use StandardCharactersets since it requires API >= 19 which we don't yet require --- .../async/ScanHostsAsyncTask.java | 5 ++-- .../runnable/ScanPortsRunnable.java | 23 +++++++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) 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; } } From 9825fd0d576de8982d752e92eae184c0f81bb527 Mon Sep 17 00:00:00 2001 From: Aaron Wood Date: Mon, 24 Feb 2020 00:14:15 -0800 Subject: [PATCH 5/5] Fix broken DNS lookups on production builds optimized with R8 --- app/build.gradle | 4 ++-- app/proguard-rules.pro | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 app/proguard-rules.pro diff --git a/app/build.gradle b/app/build.gradle index 459194ec..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") } 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.** { *; }