Rimwe zuva ndaida kuongorora maWi-Fi network kubva kuAroid application uye ndiwane ruzivo rwakadzama nezvenzvimbo dzekuwana.
Pano taifanira kutarisana nematambudziko akawanda:
Ichi chinyorwa chinokurukura nzira yekuwana yakazara data nezve Wi-Fi nharaunda kubva kuAndroid kodhi isina NDK, hacks, asi uchishandisa iyo Android API chete uye unonzwisisa nzira yekuidudzira.
Ngatisanonoke totanga kunyora kodhi.
1. Gadzira chirongwa
Ichi chinyorwa chakagadzirirwa avo vakagadzira Android chirongwa kanopfuura kamwe, saka isu tinosiya ruzivo rwechinhu ichi. Kodhi iri pazasi ichaunzwa muKotlin, minSdkVersion=23.
2. Mvumo yekuwana
Kuti ushande neWi-Fi kubva kuchishandiso, iwe unozofanirwa kuwana akati wandei mvumo kubva kumushandisi. Maererano ne
Saka, muAndroidManifest.xml tichawedzera:
<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"/>
Uye mune kodhi ine chinongedzo kune chazvino Chiitiko:
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. Gadzira BroadcastReceiver uye unyore kuzviitiko zvekuvandudza data pamusoro pekutarisa nzvimbo yetiweki yeWi-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
}
Nzira yeWiFiManager.startScan mune zvinyorwa inotaridzwa seyakanyimwa kubva paAPI vhezheni 28, asi yakadzimwa.
Pakazara, takagamuchira runyoro rwezvinhu
4. Tarisa ScanResult uye unzwisise mazwi
Ngatitarisei mamwe minda yekirasi iyi uye titsanangure zvazvinoreva:
SSID -Sevhisi Seti Identifier izita retiweki
BSSID -Basic Service Set Identifier - MAC kero yetiweki adapta (Wi-Fi poindi)
terama - Yakagamuchira Chiratidzo Chakasimba Chiratidzo [dBm (Russian dBm) - Decibel, simba rekutaura 1 mW.] - Chiratidzo chekugamuchira simba rechiratidzo. Inotora kukosha kubva pa0 kusvika -100, iyo inoenderera kubva ku0, iyo yakawanda chiratidzo chesimba yakarasika munzira kubva paWi-Fi poindi kuenda kune yako kifaa. Mamwe mashoko anogona kuwanikwa, semuenzaniso, pa
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val numberOfLevels = 5
val level = WifiManager.calculateSignalLevel(level, numberOfLevels)
maitikiro - kushanda frequency yeWi-Fi point [Hz]. Pamusoro peiyo frequency pachayo, unogona kufarira iyo inonzi chiteshi. Imwe neimwe pfungwa ine yayo yekushanda kuchena. Panguva yekunyora, iyo inonyanya kufarirwa huwandu hweWi-Fi mapoinzi ndeye 2.4 GHz. Asi, kunyatsojeka, iyo poindi inoendesa ruzivo kufoni yako nenhamba frequency pedyo neiyo yakatumidzwa. Nhamba yezviteshi uye mafambiro anoenderana
/* ΠΏΠΎ ΡΠ°ΡΡΠΎΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π° */
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
}
}
zvigone - iyo inonyanya kunakidza munda wekuongorora, shanda iyo inoda nguva yakawanda. Pano "mano" epfungwa akanyorwa mumutsara. Muchiitiko ichi, haufanirwe kutsvaga ruzivo rwekududzirwa kwetambo mune zvinyorwa. Heino mimwe mienzaniso yezvingave mumutsara uyu:
[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. Kunzwisisa zvipfupiso uye kugona kupatsanura
Zvakakodzera kuti titaure kuti makirasi eiyo android.net.wifi.* package anoshandiswa pasi pehood neLinux utility.
Tichaita nguva dzose. Ngatitangei titarise mabudiro efomati iyo zvinhu zviri mukati memaparenthesis zvinopatsanurwa ne β-β sign:
[WPA-PSK-TKIP+CCMP]
[WPA2-PSK-CCMP]
Chirevo chekutanga chinotsanangura chinonzi. nzira yechokwadi. Ndokureva kuti, ndeapi anoteedzana ezviito izvo mudziyo uye nzvimbo yekupinda iite kuitira kuti nzvimbo yekupinda izvibvumire kushandiswa uye sei encrypt iyo payload. Panguva yekunyora iyi positi, sarudzo dzakajairika ndeye WPA neWPA2, umo imwe neimwe yakabatana mudziyo wakananga kana kuburikidza neinodaidzwa. Iyo RADIUS server (WPA-Enterprice) inopa password pamusoro peiyo encrypted chiteshi. Zvingangodaro, nzvimbo yekupinda mumba mako inopa chinongedzo zvinoenderana nechirongwa ichi. Musiyano uripo pakati peyechipiri vhezheni neyekutanga ndeyekuti ine cipher yakasimba: AES maringe neTKIP isina kuchengeteka. WPA3, iyo yakanyanya kuoma uye yepamusoro, zvakare iri kuiswa zvishoma nezvishoma. Nechepfungwa, panogona kunge paine sarudzo ine bhizinesi mhinduro CCKM (Cisco Centralized Key Management), asi ini handisati ndambosangana nazvo.
Nzvimbo yekupinda inogona kunge yakagadziridzwa kuti ive chokwadi neMAC kero. Kana, kana nzvimbo yekuwana ichipa data uchishandisa yekare WEP algorithm, saka hapana chaicho chechokwadi (kiyi yakavanzika pano ndiyo kiyi yekuvharira). Isu tinoisa sarudzo dzakadai seZVIMWE.
Kune zvakare nzira inozivikanwa mune yeruzhinji wi-fi ine yakavanzika Captive Portal Detection - chikumbiro chechokwadi kuburikidza nebrowser. Mapoinzi ekuwana akadai anoonekwa kune scanner seakavhurika (izvo zvavari kubva pakuona kwekubatana kwemuviri). Naizvozvo, tinoaronga seVAKAZARURWA.
Chechipiri kukosha kunogona kutsanangurwa se key management algorithm. Iyi ndiyo parameter yenzira yechokwadi inotsanangurwa pamusoro apa. Inotaura nezve chaizvo makiyi encryption anotsinhaniswa. Ngationei zvingasarudzwa. EAP - inoshandiswa mune yakataurwa WPA-Enterprice, inoshandisa dhatabhesi kuratidza yakapinda yechokwadi data. SAE - inoshandiswa mune yepamberi WPA3, yakanyanya kurwisa kune brute force. PSK - iyo yakajairika sarudzo, inosanganisira kuisa password uye kuitumira mune encrypted fomu. IEEE8021X - zvinoenderana neyakajairwa pasi rose (yakasiyana neinotsigirwa nemhuri yeWPA). OWE (Opportunistic Wireless Encryption) ndeyekuwedzeredzwa kweIEEE 802.11 mwero wemapoinzi atakaisa OPEN. OWE inova nechokwadi chekuchengetedza data inofambiswa pane isina kuchengetedzwa network nekuinyora. Sarudzo inogoneka zvakare kana pasina makiyi ekupinda, ngatifonere iyi sarudzo HAPANA.
Yechitatu parameter ndiyo inonzi. encryption zvirongwa - sei chaizvo cipher inoshandiswa kuchengetedza data rakafambiswa. Ngatinyorei zvingasarudzwa. WEP - inoshandisa RC4 rukova cipher, kiyi yakavanzika ndeye encryption kiyi, iyo inonzi isingagamuchirwe munyika yemazuva ano cryptography. TKIP - inoshandiswa muWPA, CKIP - muWPA2. TKIP+CKIP - inogona kutsanangurwa mumapoinzi anokwanisa WPA neWPA2 yekudzokera kumashure.
Panzvimbo pezvinhu zvitatu, unogona kuwana wakasurukirwa WEP mamaki:
[WEP]
Sezvatakakurukura pamusoro apa, izvi zvakakwana kuti tisatsanangure algorithm yekushandisa makiyi, iyo isipo, uye iyo encryption nzira, iyo yakafanana neyakagadzika.
Zvino funga chibatiso ichi:
[ESS]
ichi Wi-Fi inoshanda mode kana Wi-Fi network topology. Unogona kusangana neBSS (Basic Service Set) modhi - kana paine imwe nzvimbo yekuwana iyo yakabatana michina inotaurirana. Inogona kuwanikwa pamanetiweki emuno. Semutemo, nzvimbo dzekuwana dzinodiwa kubatanidza zvishandiso kubva kune akasiyana ma network, saka iwo ari chikamu cheAkawedzera Service Sets - ESS. Iyo IBSSs (Independent Basic Service Sets) mhando inoratidza kuti chishandiso chikamu chePeer-to-Peer network.
Iwe unogona zvakare kuona iyo WPS mureza:
[WPS]
WPS (Wi-Fi Protected Setup) iprotocol yehafu-otomatiki yekutanga yeWi-Fi network. Kuti utange, mushandisi anoisa 8-character password kana kudzvanya bhatani pane router. Kana nzvimbo yako yekupinda iri yerudzi rwekutanga uye bhokisi iri rekutarisa richioneka padivi pezita renzvimbo yako yekuwana, unokurudzirwa zvikuru kuti uende kune admin panel uye wodzima kupinda kweWPS. Icho chokwadi ndechekuti kazhinji iyo 8-manhamba PIN inogona kuwanikwa neMAC kero, kana inogona kugadziriswa munguva inofanoona, iyo mumwe munhu asina kutendeseka anogona kutora mukana.
6. Gadzira muenzaniso uye kupatsanura basa
Kubva pane zvatakawana pamusoro, tichatsanangura zvakaitika tichishandisa makirasi edata:
/* ΡΡ
Π΅ΠΌΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ */
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.
}
Zvino ngatinyorei basa rinozoparura nzvimbo yekugona:
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. Ona mhedzisiro
Ini ndichatarisa network uye ndikuratidze zvandawana. Inoratidzwa mhedzisiro yekubuda nyore kuburikidza neLog.d:
Capability of Home-Home [WPA2-PSK-CCMP][ESS][WPS]
...
capabilities=[Capability(authScheme=WPA2, keyManagementAlgorithm=PSK, cipherMethod=CCMP)], topologyMode=ESS, availableWps=true
Nyaya yekubatanidza kune network kubva kukodhi yekushandisa yakaramba isina kuongororwa. Ini ndinongotaura kuti kuti uverenge mapassword akachengetwa kubva kuOS yenharembozha, iwe unoda kodzero dzemidzi uye kuda kutsvagurudza kuburikidza nefaira system kuverenga wpa_supplicant.conf. Kana iyo logic yekushandisa ichida kuisa password kubva kunze, kubatana kunogona kuitwa kuburikidza nekirasi
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
Kana iwe uchifunga kuti chimwe chinhu chinoda kuwedzerwa kana kugadziriswa, nyora mumashoko :)
Source: www.habr.com