Usa ka adlaw kinahanglan nako nga i-scan ang mga Wi-Fi network gikan sa mga aplikasyon sa Android ug makakuha og detalyado nga datos bahin sa mga access point.
Dinhi kinahanglan namon nga atubangon ang daghang mga kalisud:
Gihisgutan sa kini nga artikulo kung giunsa pagkuha ang komprehensibo nga datos bahin sa palibot sa Wi-Fi gikan sa code sa Android nga walaβy NDK, mga hack, apan gigamit ra ang Android API ug nasabtan kung giunsa kini paghubad.
Dili na ta maglangan ug sugod sa pagsulat og code.
1. Paghimo og proyekto
Kini nga nota gituyo alang sa mga naghimo sa usa ka proyekto sa Android labaw pa sa kausa, mao nga wala namon ang mga detalye niini nga butang. Ang code sa ubos ipresentar sa Kotlin, minSdkVersion=23.
2. Mga permiso sa pag-access
Aron magamit ang Wi-Fi gikan sa aplikasyon, kinahanglan nimo nga makakuha daghang mga pagtugot gikan sa tiggamit. Subay sa
Busa, sa AndroidManifest.xml atong idugang:
<uses-permission android_name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android_name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android_name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android_name="android.permission.ACCESS_FINE_LOCATION"/>
Ug sa code nga adunay usa ka link sa karon nga Kalihokan:
import android.app.Activity
import android.content.Context
import android.location.LocationManager
import androidx.core.app.ActivityCompat
....
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CHANGE_WIFI_STATE),
1
)
makeEnableLocationServices(activity.applicationContext)
} else {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.CHANGE_WIFI_STATE),
1
)
}
/* Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΊΡΠ°Π½ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ»ΡΠΆΠ±Ρ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ */
fun makeEnableLocationServices(context: Context) {
// TODO: ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π°Π΄ΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π·Π°ΡΠ΅ΠΌ ΠΠ°ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
val lm: LocationManager =
context.applicationContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
val gpsEnabled: Boolean = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
val networkEnabled: Boolean = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!gpsEnabled && !networkEnabled) {
context.startActivity(Intent(ACTION_LOCATION_SOURCE_SETTINGS));
}
}
3. Paghimo og BroadcastReceiver ug pag-subscribe sa mga panghitabo sa pag-update sa datos mahitungod sa pag-scan sa palibot sa Wi-Fi network
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiScanReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
if (success) {
scanSuccess()
}
}
}
val intentFilter = IntentFilter()
/* ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ */
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
context.registerReceiver(wifiScanReceiver, intentFilter)
val success = wifiManager.startScan()
if (!success) {
/* ΡΡΠΎ-ΡΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π²ΡΠ΄Π°Π½ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ */
}
....
private fun scanSuccess() {
/* Π²ΠΎΡ ΠΎΠ½ΠΈ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ */
val results: List<ScanResult> = wifiManager.scanResults
}
Ang pamaagi sa WiFiManager.startScan sa dokumentasyon gimarkahan nga gitangtang sukad sa bersyon sa API 28, apan wala.
Sa kinatibuk-an, nakadawat kami usa ka lista sa mga butang
4. Tan-awa ang ScanResult ug sabta ang mga termino
Atong tan-awon ang pipila ka mga natad niini nga klase ug ihulagway kung unsa ang gipasabut niini:
SSID β Ang Service Set Identifier mao ang ngalan sa network
BSSID - Basic Service Set Identifier - MAC address sa network adapter (Wi-Fi point)
nga ang-ang β Nadawat nga Signal Strength Indicator [dBm (Russian dBm) β Decibel, reference power 1 mW.] β Usa ka timailhan sa nadawat nga kusog sa signal. Nagkuha usa ka kantidad gikan sa 0 hangtod -100, labi pa gikan sa 0, mas daghang gahum sa signal ang nawala sa dalan gikan sa punto sa Wi-Fi hangtod sa imong aparato. Dugang nga mga detalye makita, pananglitan, sa
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val numberOfLevels = 5
val level = WifiManager.calculateSignalLevel(level, numberOfLevels)
frequency β frequency sa pag-operate sa Wi-Fi point [Hz]. Gawas pa sa frequency mismo, mahimong interesado ka sa gitawag nga channel. Ang matag punto adunay kaugalingon nga kaputli sa operasyon. Sa panahon sa pagsulat, ang labing popular nga range sa Wi-Fi points mao ang 2.4 GHz. Apan, aron mahimong mas tukma, ang punto nagpadala sa impormasyon sa imong telepono sa usa ka numero nga frequency duol sa usa nga ginganlan. Gidaghanon sa mga kanal ug katugbang nga mga frequency
/* ΠΏΠΎ ΡΠ°ΡΡΠΎΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π° */
val channel: Int
get() {
return if (frequency in 2412..2484) {
(frequency - 2412) / 5 + 1
} else if (frequency in 5170..5825) {
(frequency - 5170) / 5 + 34
} else {
-1
}
}
Kapabilidad - ang labing makapaikag nga natad alang sa pagtuki, pagtrabaho nga nanginahanglan daghang oras. Dinhi ang "kapabilidad" sa punto gisulat sa linya. Sa kini nga kaso, dili nimo kinahanglan pangitaon ang mga detalye sa paghubad sa string sa dokumentasyon. Ania ang pipila ka mga pananglitan kung unsa ang mahimo sa kini nga linya:
[WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS]
[WPA2-PSK-CCMP][ESS]
[WPA2-PSK-CCMP+TKIP][ESS]
[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]
[ESS][WPS]
5. Pagsabot sa mga minubo ug mga kapabilidad sa pag-parse
Angay nga hisgutan nga ang mga klase sa android.net.wifi.* nga pakete gigamit sa ilawom sa hood sa usa ka utility sa Linux
Kita molihok nga makanunayon. Atong hisgotan una ang output sa usa ka format diin ang mga elemento sa sulod sa parentesis gibulag sa usa ka "-" nga timaan:
[WPA-PSK-TKIP+CCMP]
[WPA2-PSK-CCMP]
Ang unang kahulogan naghulagway sa gitawag nga. pamaagi sa pag-authenticate. Sa ato pa, unsa nga pagkasunod-sunod sa mga aksyon ang kinahanglan nga buhaton sa aparato ug ang access point aron ang access point tugutan ang kaugalingon nga magamit ug kung giunsa ang pag-encrypt sa payload. Sa panahon sa pagsulat niini nga post, ang labing komon nga mga kapilian mao ang WPA ug WPA2, diin ang matag konektado nga device direkta o pinaagi sa gitawag nga. Ang RADIUS server (WPA-Enterprice) naghatag sa password sa usa ka encrypted channel. Lagmit, ang access point sa imong balay naghatag og koneksyon sumala niini nga laraw. Ang kalainan tali sa ikaduha nga bersyon ug sa una mao nga kini adunay mas lig-on nga cipher: AES batok sa dili sigurado nga TKIP. Ang WPA3, nga mas komplikado ug abante, anam-anam usab nga gipaila. Sa teoriya, mahimo nga adunay usa ka kapilian sa solusyon sa enterprice CCKM (Cisco Centralized Key Management), apan wala pa nako kini makit-an.
Ang access point mahimong na-configure aron ma-authenticate pinaagi sa MAC address. O, kung ang access point naghatag ug data gamit ang outdated WEP algorithm, nan walay tinuod nga authentication (ang sekreto nga yawe dinhi mao ang encryption key). Giklasipikar namo ang ingon nga mga kapilian ingon UBAN.
Adunay usab usa ka pamaagi nga sikat sa publiko nga wi-fi nga adunay gitago nga Captive Portal Detection - usa ka hangyo sa pag-authenticate pinaagi sa usa ka browser. Ang ingon nga mga access point makita sa scanner nga bukas (nga gikan sa punto sa pagtan-aw sa pisikal nga koneksyon). Busa, giklasipikar namo sila isip OPEN.
Ang ikaduha nga kantidad mahimong itudlo ingon yawe sa pagdumala algorithm. Kini usa ka parameter sa pamaagi sa pag-authenticate nga gihulagway sa ibabaw. Naghisgot bahin sa eksakto kung giunsa pagbaylo ang mga yawe sa pag-encrypt. Atong tagdon ang posibleng mga kapilian. EAP - gigamit sa nahisgutang WPA-Enterprice, naggamit ug database aron mapamatud-an ang gisulod nga data sa pag-authenticate. SAE - gigamit sa advanced WPA3, mas makasugakod sa brute force. PSK - ang labing komon nga kapilian, naglakip sa pagsulod sa usa ka password ug sa pagpadala niini sa encrypted nga porma. IEEE8021X - sumala sa internasyonal nga sumbanan (lahi sa gisuportahan sa pamilyang WPA). Ang OWE (Opportunistic Wireless Encryption) usa ka extension sa IEEE 802.11 nga sumbanan alang sa mga punto nga among giklasipikar nga OPEN. Gisiguro sa OWE ang seguridad sa datos nga gipasa sa usa ka dili sigurado nga network pinaagi sa pag-encrypt niini. Posible usab ang usa ka kapilian kung walaβy mga yawe sa pag-access, tawgon naton kini nga kapilian nga WALA.
Ang ikatulo nga parameter mao ang gitawag nga. mga laraw sa pag-encrypt β kung unsa gyud ang gigamit sa cipher aron mapanalipdan ang gipasa nga datos. Atong ilista ang mga kapilian. WEP - naggamit sa RC4 stream cipher, ang sekreto nga yawe mao ang encryption key, nga giisip nga dili madawat sa kalibutan sa modernong cryptography. TKIP - gigamit sa WPA, CKIP - sa WPA2. TKIP+CKIP - mahimong espesipiko sa mga punto nga makahimo sa WPA ug WPA2 alang sa atras nga pagkaangay.
Imbis nga tulo ka elemento, makit-an nimo ang usa ka kamingaw nga marka sa WEP:
[WEP]
Sama sa atong gihisgutan sa ibabaw, kini igo nga dili itakda ang algorithm sa paggamit sa mga yawe, nga wala maglungtad, ug ang pamaagi sa pag-encrypt, nga parehas sa default.
Karon hunahunaa kini nga bracket:
[ESS]
kini Wi-Fi operating mode o Topolohiya sa Wi-Fi network. Mahimo nimong masugatan ang BSS (Basic Service Set) mode - kung adunay usa ka access point diin ang konektado nga mga aparato nakigsulti. Makita sa mga lokal nga network. Ingon sa usa ka lagda, ang mga access point gikinahanglan aron makonektar ang mga device gikan sa lain-laing mga lokal nga network, mao nga sila kabahin sa Extended Service Sets - ESS. Ang tipo sa IBSS (Independent Basic Service Sets) nagpakita nga ang device kabahin sa usa ka Peer-to-Peer network.
Mahimo usab nimo makita ang bandila sa WPS:
[WPS]
Ang WPS (Wi-Fi Protected Setup) usa ka protocol alang sa semi-awtomatikong pagsugod sa usa ka Wi-Fi network. Sa pagsugod, ang user mahimong mosulod sa usa ka 8-character nga password o mopilit sa usa ka buton sa router. Kung ang imong access point mao ang una nga tipo ug kini nga checkbox makita sunod sa ngalan sa imong access point, kusganon ka nga girekomenda nga moadto sa admin panel ug i-disable ang WPS access. Ang kamatuoran mao nga sa kasagaran ang 8-digit nga PIN mahimong makit-an pinaagi sa MAC address, o mahimo kini nga masulbad sa usa ka makit-an nga panahon, nga mahimong mapahimuslan sa usa ka tawo nga dili matinud-anon.
6. Paghimo ug modelo ug parsing function
Base sa among nahibal-an sa ibabaw, among ihulagway kung unsa ang nahitabo gamit ang mga klase sa datos:
/* ΡΡ
Π΅ΠΌΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ */
enum class AuthMethod {
WPA3,
WPA2,
WPA, // Wi-Fi Protected Access
OTHER, // Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Shared Key Authentication ΠΈ Π΄Ρ. ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ mac-address-based ΠΈ WEP
CCKM, // Cisco
OPEN // Open Authentication. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎ ΡΠΊΡΡΡΡΠΌ Captive Portal Detection - Π·Π°ΠΏΡΠΎΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· Π±ΡΠ°ΡΠ·Π΅Ρ
}
/* Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²Π²ΠΎΠ΄Π° ΠΊΠ»ΡΡΠ΅ΠΉ */
enum class KeyManagementAlgorithm {
IEEE8021X, // ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ
EAP, // Extensible Authentication Protocol, ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
PSK, // Pre-Shared Key β ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» Π²Π²ΠΎΠ΄ΠΈΡ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΠΈ
WEP, // Π² WEP ΠΏΠ°ΡΠΎΠ»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»ΡΡΠΎΠΌ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ (No auth key)
SAE, // Simultaneous Authentication of Equals - ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² WPA3
OWE, // Opportunistic Wireless Encryption - Π² ΡΠΎΡΡΠ΅ΡΠ°Ρ
Π½ΠΎΠ²ΡΡ
ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ, ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ
ΡΠ΅ΡΡΡ
ΡΠΈΠΏΠ° OPEN
NONE // ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±Π΅Π· ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π² OPEN, OTHER
}
/* ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ */
enum class CipherMethod {
WEP, // Wired Equivalent Privacy, ΠΠ½Π°Π»ΠΎΠ³ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΠΈΠΊΠ° Π² ΠΏΡΠΎΠ²ΠΎΠ΄Π½ΡΡ
ΡΠ΅ΡΡΡ
TKIP, // Temporal Key Integrity Protocol
CCMP, // Counter Mode with Cipher Block Chaining Message Authentication Code Protocol,
// ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π±Π»ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π°ΡΡΠ΅Π½ΡΠΈΡΠ½ΠΎΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΡΡΠ΅ΡΡΠΈΠΊΠ°
// Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ AES
NONE // ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±Π΅Π· ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π² OPEN, OTHER
}
/* Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ², ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΡΠΊΠ° */
data class Capability(
var authScheme: AuthMethod? = null,
var keyManagementAlgorithm: KeyManagementAlgorithm? = null,
var cipherMethod: CipherMethod? = null
)
/* Π Π΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ WiFi (ΠΈΠ»ΠΈ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ΅ΡΠ΅ΠΉ WiFi) */
enum class TopologyMode {
IBSS, // ΠΠΏΠΈΠ·ΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΡΡ (Ad-Hoc ΠΈΠ»ΠΈ IBSS β Independent Basic Service Set).
BSS, // ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π·ΠΎΠ½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Basic Service Set (BSS) ΠΈΠ»ΠΈ Infrastructure Mode.
ESS // Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ Π·ΠΎΠ½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ESS β Extended Service Set.
}
Karon magsulat kita og usa ka function nga mag-parse sa mga kapabilidad nga field:
private fun parseCapabilities(capabilitiesString: String): List < Capability > {
val capabilities: List < Capability > = capabilitiesString
.splitByBrackets()
.filter {
!it.isTopology() && !it.isWps()
}
.flatMap {
parseCapability(it)
}
return
if (!capabilities.isEmpty()) {
capabilities
} else {
listOf(Capability(AuthMethod.OPEN, KeyManagementAlgorithm.NONE, CipherMethod.NONE))
}
}
private fun parseCapability(part: String): List < Capability > {
if (part.contains("WEP")) {
return listOf(Capability(
AuthMethod.OTHER,
KeyManagementAlgorithm.WEP,
CipherMethod.WEP
))
}
val authScheme = when {
part.contains("WPA3") - > AuthMethod.WPA3
part.contains("WPA2") - > AuthMethod.WPA2
part.contains("WPA") - > AuthMethod.WPA
else - > null
}
val keyManagementAlgorithm = when {
part.contains("OWE") - > KeyManagementAlgorithm.OWE
part.contains("SAE") - > KeyManagementAlgorithm.SAE
part.contains("IEEE802.1X") - > KeyManagementAlgorithm.IEEE8021X
part.contains("EAP") - > KeyManagementAlgorithm.EAP
part.contains("PSK") - > KeyManagementAlgorithm.PSK
else - > null
}
val capabilities = ArrayList < Capability > ()
if (part.contains("TKIP") || part.contains("CCMP")) {
if (part.contains("TKIP")) {
capabilities.add(Capability(
authScheme ? : AuthMethod.OPEN,
keyManagementAlgorithm ? : KeyManagementAlgorithm.NONE,
CipherMethod.TKIP
))
}
if (part.contains("CCMP")) {
capabilities.add(Capability(
authScheme ? : AuthMethod.OPEN,
keyManagementAlgorithm ? : KeyManagementAlgorithm.NONE,
CipherMethod.CCMP
))
}
} else if (authScheme != null || keyManagementAlgorithm != null) {
capabilities.add(Capability(
authScheme ? : AuthMethod.OPEN,
keyManagementAlgorithm ? : KeyManagementAlgorithm.NONE,
CipherMethod.NONE
))
}
return capabilities
}
private fun parseTopologyMode(capabilitiesString: String): TopologyMode ? {
return capabilitiesString
.splitByBrackets()
.mapNotNull {
when {
it.contains("ESS") - > TopologyMode.ESS
it.contains("BSS") - > TopologyMode.BSS
it.contains("IBSS") - > TopologyMode.IBSS
else - > null
}
}
.firstOrNull()
}
private fun parseWPSAvailable(capabilitiesString: String): Boolean {
return capabilitiesString
.splitByBrackets()
.any {
it.isWps()
}
}
private fun String.splitByBrackets(): List < String > {
val m = Pattern.compile("[(.*?)]").matcher(this)
val parts = ArrayList < String > ()
while (m.find()) {
parts.add(m.group().replace("[", "").replace("]", ""))
}
return parts
}
private fun String.isTopology(): Boolean {
return TopologyMode.values().any {
this == it.name
}
}
private fun String.isWps(): Boolean {
return this == "WPS"
}
8. Tan-awa ang resulta
I-scan ko ang network ug ipakita kanimo kung unsa ang akong nakit-an. Gipakita ang mga resulta sa yano nga output pinaagi sa Log.d:
Capability of Home-Home [WPA2-PSK-CCMP][ESS][WPS]
...
capabilities=[Capability(authScheme=WPA2, keyManagementAlgorithm=PSK, cipherMethod=CCMP)], topologyMode=ESS, availableWps=true
Ang isyu sa pagkonektar sa network gikan sa aplikasyon code nagpabilin nga wala masusi. Isulti ra nako nga aron mabasa ang mga na-save nga password gikan sa OS sa usa ka mobile device, kinahanglan nimo ang mga katungod sa gamut ug kaandam sa pag-usisa sa file system aron mabasa ang wpa_supplicant.conf. Kung ang lohika sa aplikasyon nanginahanglan pagsulod sa usa ka password gikan sa gawas, ang koneksyon mahimo pinaagi sa klase
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
Kung sa imong hunahuna adunay kinahanglan nga idugang o gitul-id, isulat sa mga komento :)
Source: www.habr.com