Maalin maalmaha ka mid ah waxaan u baahday inaan iskaan ka qaado shabakadaha Wi-Fi ee barnaamijyada Android oo aan helo xog faahfaahsan oo ku saabsan meelaha laga galo.
Halkan waxa ay ahayd in aan la kulanno dhibaatooyin dhowr ah:
Maqaalkani waxa uu ka hadlayaa sida loo helo xog dhamaystiran oo ku saabsan deegaanka Wi-Fi ka Android code iyada oo aan NDK, hacks, laakiin la isticmaalayo oo kaliya API Android iyo fahmaan sida loo fasiro.
Yaynaan dib u dhigin oo bilaabin kood qorista.
1. Abuur mashruuc
Qoraalkan waxaa loogu talagalay kuwa sameeyay mashruuc Android ka badan hal mar, marka waxaan ka tagnay faahfaahinta shaygan. Koodhka hoose waxa lagu soo bandhigi doonaa Kotlin, minSdkVersion=23.
2. Ogolaanshaha gelitaanka
Si aad Wi-Fi ugala shaqeyso arjiga, waxaad u baahan doontaa inaad dhawr ogolaansho ka hesho isticmaalaha. Sida waafaqsan
Marka, gudaha AndroidManifest.xml waxaan ku dari doonaa:
<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"/>
Iyo koodka ka kooban xidhiidhka Hawsha hadda:
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. Abuur BroadcastReceiver oo ku biir dhacdooyinka cusboonaysiinta xogta ee ku saabsan iskaanka deegaanka shabakadda Wi-Fi
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
}
Habka WiFiManager.startScan ee dukumeentigu waxa loo calaameeyay mid ka go'ay tan iyo nooca API 28, laakiin off
Guud ahaan, waxaan helnay liiska walxaha
4. Fiiri ScanResult oo fahan shuruudaha
Aynu eegno qaybo ka mid ah fasalkan oo aynu qeexno waxay ula jeedaan:
SSID - Aqoonsiga Set Service waa magaca shabakada
BSSID - Aqoonsiga Dejinta Adeegga Aasaasiga ah - Cinwaanka MAC ee adabtarada shabakadda (barta Wi-Fi)
heerka - Tusiyaha Xoogga La Helay [dBm (DBm Ruush) - Decibel, awoodda tixraaca 1 mW.] - Tusiyaha xoogga calaamada ee la helay. Wuxuu qiimeeyaa 0 ilaa -100, marka uu ka sii socdo 0, inta badan ee awooda calaamaduhu way luntay jidka laga bilaabo barta Wi-Fi ilaa aaladdaada. Faahfaahin dheeraad ah ayaa laga heli karaa, tusaale ahaan, at
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val numberOfLevels = 5
val level = WifiManager.calculateSignalLevel(level, numberOfLevels)
inta jeer - inta jeer ee hawlgalka ee barta Wi-Fi [Hz]. Marka lagu daro inta jeer ee lafteeda, waxaa laga yaabaa inaad xiisaynayso waxa loogu yeero kanaalka. Dhibc kastaa wuxuu leeyahay daahir hawleed u gaar ah. Waqtiga qorista, tirada ugu caansan ee dhibcaha Wi-Fi waa 2.4 GHz. Laakin, si aad u noqoto mid sax ah, bartu waxa ay macluumaadka ugu gudbisaa talefankaaga iyada oo la adeegsanayo inta jeer ee lambar leh ee u dhaw midka la magacaabay. Tirada kanaalada iyo inta jeer ee u dhiganta
/* ΠΏΠΎ ΡΠ°ΡΡΠΎΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π° */
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
}
}
Awoodaha - goobta ugu xiisaha badan ee falanqaynta, shaqada oo u baahan waqti badan. Halkan "awoodaha" barta waxay ku qoran yihiin laynka. Xaaladdan oo kale, uma baahnid inaad ka raadiso faahfaahinta tarjumaada xargaha dukumeentiga. Waa kuwan tusaalayaal waxa laga yaabaa in sadarkan:
[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. Fahamka soo gaabinta iyo awoodaha falanqaynta
Waxaa xusid mudan in fasalada xirmada android.net.wifi.* lagu isticmaalo daboolka hoostiisa utility Linux ah.
Waxaan u dhaqmi doonaa si joogto ah. Aan marka hore tixgelinno soo saarista qaab kaas oo walxaha ku jira khaanadaha ay kala soocaan calaamad "-":
[WPA-PSK-TKIP+CCMP]
[WPA2-PSK-CCMP]
Macnaha kowaad wuxuu qeexayaa waxa loogu yeero. habka xaqiijinta. Taasi waa, waa maxay taxanaha ficillada ay tahay in aaladda iyo barta gelitaanka ay fuliyaan si barta gelitaanka ay u oggolaato in la isticmaalo iyo sida loo xafido culeyska lacag bixinta. Waqtiga qorista boostada, fursadaha ugu caansan waa WPA iyo WPA2, kuwaas oo qalab kasta oo ku xiran si toos ah ama iyada oo loo marayo waxa loogu yeero. Adeegga RADIUS (WPA-Enterprice) waxa uu siinaya erayga sirta ah kanaalka sir ah. Inta badan, barta gelitaanka ee gurigaaga ayaa ku siinaysa xiriir sida nidaamkan qabo. Farqiga u dhexeeya nooca labaad iyo kan koowaad waa inuu leeyahay xaraf ka xoog badan: AES oo ka soo horjeeda TKIP-da aan ammaan ahayn. WPA3, oo aad u adag oo horumarsan, ayaa sidoo kale si tartiib tartiib ah loo soo bandhigay. Aragti ahaan, waxaa jiri kara ikhtiyaar ah xalka ganacsiga ee CCKM (Maareynta Muhiimka ah ee Cisco Central), laakiin waligey lama kulmin.
Meesha gelitaanka ayaa laga yaabaa in loo habeeyey si loogu xaqiijiyo ciwaanka MAC. Ama, haddii barta gelitaanka ay bixiso xogta iyadoo la adeegsanayo algorithm WEP ee duugoobay, markaa dhab ahaantii ma jiraan wax caddayn ah (furaha sirta ah ee halkan waa furaha sirta ah). Waxaan u kala saarnaa xulashooyinka sida kuwa KALE.
Waxa kale oo jira hab caan ku ah wi-fi-ga guud oo leh Qarsoodi Xariirka Qabashada - Codsiga xaqiijinta ee browserka. Qodobbada gelitaanka noocan oo kale ah waxay u muuqdaan iskaanka si furan (kuwaas oo ka soo jeeda aragtida xiriirka jireed). Sidaa darteed, waxaan u kala saarnay inay yihiin FURAN.
Qiimaha labaad waxaa lagu tilmaami karaa sida algorithm maamulka muhiimka ah. Kani waa halbeegga habka xaqiijinta ee kor lagu tilmaamay. Waxa uu ka hadlayaa sida saxda ah ee furayaasha sirta la isu weydaarsado. Aynu tixgelinno fursadaha suurtogalka ah. EAP - oo lagu isticmaalo WPA-Enterprice-ka la sheegay, waxay isticmaashaa xog ururin si loo xaqiijiyo xogta aqoonsiga ee la geliyey. SAE - loo isticmaalo WPA3 horumarsan, oo aad u adkeysi badan u leh xoogga caasinimada. PSK - ikhtiyaarka ugu badan, waxay ku lug leedahay gelida erayga sirta ah iyo gudbinta qaab sir ah. IEEE8021X - marka loo eego heerka caalamiga ah (oo ka duwan kan ay taageeraan qoyska WPA). OWE (Opportunistic Wireless Encryption) waa kordhinta heerka IEEE 802.11 ee dhibcaha aan u kala saarnay OPEN. OWE waxay hubisaa amniga xogta lagu gudbiyo shabakad aan ammaan ahayn iyadoo sir siraysa. Ikhtiyaarka sidoo kale waa suurtogal marka aysan jirin furayaal gelitaan, aynu u yeedhno doorashadan MAYA.
Halbeegga saddexaad waa waxa loogu yeero. nidaamyada sirta - sida saxda ah ee xarafka loo isticmaalo si loo ilaaliyo xogta la gudbiyo. Aan liis gareeyno xulashooyinka. WEP - waxay isticmaashaa xariiqda qulqulka RC4, furaha sirta ah waa furaha sirta ah, kaas oo loo arko inaan la aqbali karin aduunka casriga casriga ah. TKIP - loo isticmaalo WPA, CKIP - gudaha WPA2. TKIP+CKIP - waxaa lagu qeexi karaa dhibco awood u leh WPA iyo WPA2 ee ku habboonaanta gadaal.
Halkii laga heli lahaa saddex walxood, waxaad heli kartaa calaamad WEP ah oo keli ah:
[WEP]
Sida aan kor uga soo hadalnay, tani waa ku filan tahay in aan la cayimin algorithm ee isticmaalka furayaasha, oo aan jirin, iyo habka sirta ah, taas oo la mid ah sida caadiga ah.
Hadda ka fiirso garabkan:
[ESS]
this Habka hawlgalka Wi-Fi ama Wi-Fi network topology. Waxaa laga yaabaa inaad la kulanto qaabka BSS (Adeegyada Aasaasiga ah) - marka ay jirto hal meel oo laga galo oo ay ku wada xiriiraan aaladaha ku xiran. Waxaa laga heli karaa shabakadaha maxalliga ah. Sida caadiga ah, dhibcaha gelitaanka ayaa loo baahan yahay si loogu xiro aaladaha shabakadaha maxalliga ah ee kala duwan, sidaa darteed waxay qayb ka yihiin Adeegga Dheeraadka ah - ESS. Nooca IBSS-yada (Madax-bannaanida Adeegga Aasaasiga ah) ayaa tilmaamaya in qalabku uu qayb ka yahay isku-xidhka Peer-to-Peer.
Waxa kale oo aad arki kartaa calanka WPS:
[WPS]
WPS (Wi-Fi Protected Setup) waa borotokoolka bilawga nus toos ah ee shabakada Wi-Fi. Si loo bilaabo, isticmaaluhu wuxuu galayaa 8-dabeecadood erayga sirta ah ama wuxuu riixaa badhanka router-ka. Haddii barta gelitaankaagu ay tahay nooca koowaad oo sanduuqan uu ka soo muuqdo magaca ku xiga magaca barta gelitaankaaga, waxaa si xoog leh lagugula talinayaa inaad tagto guddiga maamulka oo aad joojiso gelitaanka WPS. Xaqiiqdu waxay tahay in inta badan PIN-ka 8-god ah laga heli karo cinwaanka MAC, ama waxaa lagu xalin karaa wakhti la filan karo, taas oo qof si daacadnimo ah uga faa'iidaysan karo.
6. Samee qaab iyo hawl falanqeyn
Iyada oo ku saleysan waxa aan kor ku ogaannay, waxaan ku tilmaami doonaa waxa dhacay anagoo adeegsanayna fasalada xogta:
/* ΡΡ
Π΅ΠΌΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ */
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.
}
Hadda aynu qorno hawl kala saari doonta goobta kartida:
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. eeg natiijada
Waan iskaan doonaa shabakada oo waxaan ku tusi doonaa waxaan helay. Waxaa lagu muujiyay natiijooyinka wax soo saarka fudud ee Log.d:
Capability of Home-Home [WPA2-PSK-CCMP][ESS][WPS]
...
capabilities=[Capability(authScheme=WPA2, keyManagementAlgorithm=PSK, cipherMethod=CCMP)], topologyMode=ESS, availableWps=true
Arrinka ku xidhidhiyaha shabakadda ee koodhka codsiga ayaa ahaa mid aan la baadhin. Kaliya waxaan dhihi doonaa si aad u akhrido furaha sirta ah ee la keydiyay ee OS ee aaladda moobiilka, waxaad u baahan tahay xuquuqaha xididka iyo rabitaanka inaad ku dhex gasho nidaamka faylka si aad u akhrido wpa_supplicant.conf. Haddii macquulka codsigu u baahan yahay ka soo gelida erayga sirta ah ee dibadda, xidhiidhka waxaa la samayn karaa iyada oo loo marayo fasalka
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
Haddii aad u malaynayso in wax loo baahan yahay in lagu daro ama la saxo, ku qor faallooyinka :)
Source: www.habr.com