From f862e0e2cb40f5ab37a99335c8e1b5ed6b5379b7 Mon Sep 17 00:00:00 2001 From: NeutroniumArmor <275189832+NeutroniumArmor@users.noreply.github.com> Date: Sun, 12 Apr 2026 06:53:40 +0500 Subject: [PATCH] feat: randomize xray api address --- .../main/kotlin/com/simplexray/an/common/ConfigUtils.kt | 2 +- app/src/main/kotlin/com/simplexray/an/prefs/Preferences.kt | 7 +++++++ .../main/kotlin/com/simplexray/an/service/TProxyService.kt | 6 ++++++ .../kotlin/com/simplexray/an/viewmodel/MainViewModel.kt | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplexray/an/common/ConfigUtils.kt b/app/src/main/kotlin/com/simplexray/an/common/ConfigUtils.kt index ff93ffc3..7bc8d88b 100644 --- a/app/src/main/kotlin/com/simplexray/an/common/ConfigUtils.kt +++ b/app/src/main/kotlin/com/simplexray/an/common/ConfigUtils.kt @@ -32,7 +32,7 @@ object ConfigUtils { val apiObject = JSONObject() apiObject.put("tag", "api") - apiObject.put("listen", "127.0.0.1:${prefs.apiPort}") + apiObject.put("listen", "${prefs.apiAddress}:${prefs.apiPort}") val servicesArray = org.json.JSONArray() servicesArray.put("StatsService") apiObject.put("services", servicesArray) diff --git a/app/src/main/kotlin/com/simplexray/an/prefs/Preferences.kt b/app/src/main/kotlin/com/simplexray/an/prefs/Preferences.kt index 87f83300..f0da40a2 100644 --- a/app/src/main/kotlin/com/simplexray/an/prefs/Preferences.kt +++ b/app/src/main/kotlin/com/simplexray/an/prefs/Preferences.kt @@ -284,6 +284,12 @@ class Preferences(context: Context) { setValueInProvider(GEOSITE_URL, value) } + var apiAddress: String + get() = getPrefData(API_ADDRESS).first ?: "127.0.0.1" + set(address) { + setValueInProvider(API_ADDRESS, address) + } + var apiPort: Int get() { val value = getPrefData(API_PORT).first @@ -331,6 +337,7 @@ class Preferences(context: Context) { const val CONNECTIVITY_TEST_TIMEOUT: String = "ConnectivityTestTimeout" const val GEOIP_URL: String = "GeoipUrl" const val GEOSITE_URL: String = "GeositeUrl" + const val API_ADDRESS: String = "ApiAddress" const val API_PORT: String = "ApiPort" const val BYPASS_SELECTED_APPS: String = "BypassSelectedApps" const val THEME: String = "Theme" diff --git a/app/src/main/kotlin/com/simplexray/an/service/TProxyService.kt b/app/src/main/kotlin/com/simplexray/an/service/TProxyService.kt index a021b0f6..c90c6c5c 100644 --- a/app/src/main/kotlin/com/simplexray/an/service/TProxyService.kt +++ b/app/src/main/kotlin/com/simplexray/an/service/TProxyService.kt @@ -183,6 +183,12 @@ class TProxyService : VpnService() { prefs.apiPort = apiPort Log.d(TAG, "Found and set API port: $apiPort") + val octet2 = (0..255).random() + val octet3 = (0..255).random() + val octet4 = (1..254).random() + prefs.apiAddress = "127.$octet2.$octet3.$octet4" + Log.d(TAG, "Randomized API address: ${prefs.apiAddress}") + val processBuilder = getProcessBuilder(xrayPath) currentProcess = processBuilder.start() this.xrayProcess = currentProcess diff --git a/app/src/main/kotlin/com/simplexray/an/viewmodel/MainViewModel.kt b/app/src/main/kotlin/com/simplexray/an/viewmodel/MainViewModel.kt index de1280ec..70afe486 100644 --- a/app/src/main/kotlin/com/simplexray/an/viewmodel/MainViewModel.kt +++ b/app/src/main/kotlin/com/simplexray/an/viewmodel/MainViewModel.kt @@ -325,7 +325,7 @@ class MainViewModel(application: Application) : suspend fun updateCoreStats() { if (!_isServiceEnabled.value) return if (coreStatsClient == null) - coreStatsClient = CoreStatsClient.create("127.0.0.1", prefs.apiPort) + coreStatsClient = CoreStatsClient.create(prefs.apiAddress, prefs.apiPort) val stats = coreStatsClient?.getSystemStats() val traffic = coreStatsClient?.getTraffic()