Skip to content

Commit 558a2a0

Browse files
author
krxkli
committed
Fix Subnet Validation
1 parent 9e62f9a commit 558a2a0

File tree

7 files changed

+53
-10
lines changed

7 files changed

+53
-10
lines changed

Android/app/build.gradle.kts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ android {
1111
applicationId = "com.krxkli.scut_router"
1212
minSdk = 24
1313
targetSdk = 34
14-
versionCode = 3
15-
versionName = "1.1.1"
14+
versionCode = 4
15+
versionName = "1.1.2"
1616

1717
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
1818

@@ -63,6 +63,7 @@ dependencies {
6363
implementation(libs.androidx.preference)
6464
implementation(libs.androidx.activity)
6565
implementation(libs.androidx.legacy.support.v4)
66+
implementation("commons-net:commons-net:3.11.1")
6667
testImplementation(libs.junit)
6768
androidTestImplementation(libs.androidx.junit)
6869
androidTestImplementation(libs.androidx.espresso.core)
112 KB
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

Android/app/release/output-metadata.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
"type": "SINGLE",
1212
"filters": [],
1313
"attributes": [],
14-
"versionCode": 3,
15-
"versionName": "1.1.1",
14+
"versionCode": 4,
15+
"versionName": "1.1.2",
1616
"outputFile": "app-release.apk"
1717
}
1818
],

Android/app/src/main/java/com/example/scut_router/MainActivity.kt

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ import androidx.appcompat.app.AppCompatActivity
1717
import androidx.core.app.ActivityCompat
1818
import androidx.core.content.ContextCompat
1919
import com.example.scut_router.databinding.ActivityMainBinding
20+
import java.net.Inet4Address
21+
import java.net.NetworkInterface
22+
import org.apache.commons.net.util.SubnetUtils
2023

2124
class MainActivity : AppCompatActivity() {
2225

@@ -89,10 +92,26 @@ class MainActivity : AppCompatActivity() {
8992
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath
9093
initLibSSHCommand(downloadPath)
9194

92-
Toast.makeText(this, getString(R.string.core_loaded_successfully), Toast.LENGTH_SHORT).show()
95+
Toast.makeText(this, getString(R.string.core_loaded_successfully), Toast.LENGTH_SHORT)
96+
.show()
97+
}
98+
99+
private fun htonl(value: Int): Int {
100+
return (value shl 24) or
101+
((value and 0x00FF0000) shr 8) or
102+
((value and 0x0000FF00) shl 8) or
103+
(value shr 24)
104+
}
105+
106+
private fun ntohl(value: Int): Int {
107+
return (value shl 24) or
108+
((value and 0x00FF0000) shr 8) or
109+
((value and 0x0000FF00) shl 8) or
110+
(value shr 24)
93111
}
94112

95113
private fun checkIsValidConn(): Boolean {
114+
// 分析是否与 已知子网 吻合
96115
// 检查是否正确连接路由器
97116
val context: Context = this
98117
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
@@ -102,11 +121,33 @@ class MainActivity : AppCompatActivity() {
102121
val ipStr = Formatter.formatIpAddress(ipAddr)
103122
println("IP 地址: $ipStr")
104123

105-
if (ipStr != this.getString(R.string.default_router_conn)) {
106-
return false
107-
} else {
108-
return true
124+
val interfaces = NetworkInterface.getNetworkInterfaces()
125+
while (interfaces.hasMoreElements()) {
126+
val ifa = interfaces.nextElement()
127+
if (!ifa.isUp || ifa.isLoopback) {
128+
continue
129+
}
130+
if (ifa.name == getString(R.string.wlanIfaName)) {
131+
val addresses = ifa.interfaceAddresses
132+
for (addr in addresses) {
133+
if (addr.address is Inet4Address) {
134+
val prefixLen = addr.networkPrefixLength
135+
val subnetUtils = SubnetUtils("$ipStr/$prefixLen")
136+
val subNet = subnetUtils.info
137+
138+
println("IP 子网: ${subNet.networkAddress}")
139+
140+
if (subNet.networkAddress == this.getString(R.string.default_router_conn)) {
141+
return true
142+
} else {
143+
return false
144+
}
145+
}
146+
}
147+
}
109148
}
149+
150+
return false
110151
}
111152

112153

Android/app/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919
<string name="gateway">gateway</string>
2020
<string name="dns_1" translatable="false">DNS 1</string>
2121
<string name="dns_2" translatable="false">DNS 2</string>
22-
<string name="default_router_conn" translatable="false">192.168.0.101</string>
22+
<string name="default_router_conn" translatable="false">192.168.0.0</string>
2323
<string name="validConnTitle">The router may not be connected</string>
2424
<string name="validConnMsg">Whether to exit the application</string>
2525
<string name="validConnYes">Yes</string>
2626
<string name="validConnNo">No</string>
2727
<string name="loadCore">Loading Core</string>
2828
<string name="core_loaded_successfully">Core Loaded successfully</string>
29+
<string name="wlanIfaName" translatable="false">wlan0</string>
2930
</resources>

0 commit comments

Comments
 (0)