Wi-Fi thiab ntau lwm cov ntawv luv. Yuav ua li cas kom tau txais cov ntaub ntawv hais txog Wi-Fi nodes hauv daim ntawv thov Android yam tsis tau o

Muaj ib hnub kuv yuav tsum luam theej duab Wi-Fi tes hauj lwm los ntawm cov ntawv thov Android thiab tau txais cov ntaub ntawv ntxaws txog cov ntsiab lus nkag.

Ntawm no peb yuav tsum tau ntsib ntau yam teeb meem: off.Android cov ntaub ntawv ntau ntawm cov chav kawm uas tau piav qhia tau dhau los ua tsis pom zoo (API qib> 26), uas tsis tau xav txog hauv nws; cov lus piav qhia ntawm qee yam hauv cov ntaub ntawv muaj tsawg heev (piv txwv li, lub peev xwm ntawm chav kawm ScanResult thaum lub sijhawm sau ntawv, yuav luag tsis muaj dab tsi piav qhia, txawm hais tias nws muaj ntau cov ntaub ntawv tseem ceeb). Qhov teeb meem thib peb tuaj yeem dag nyob rau hauv qhov tseeb tias thaum koj thawj zaug ze rau Wi-Fi, tsis yog nyeem cov kev xav thiab teeb tsa lub router ntawm localhost, koj yuav tsum tau nrog ntau cov ntawv luv uas zoo li nkag siab ib tus zuj zus. Tab sis nws yuav tsis pom tseeb tias yuav cuam tshuam li cas thiab teeb tsa lawv (kev txiav txim siab yog cov ntsiab lus thiab nyob ntawm qhov kev paub dhau los).

Kab lus no tham txog yuav ua li cas kom tau txais cov ntaub ntawv qhia txog Wi-Fi ib puag ncig los ntawm Android code yam tsis muaj NDK, hacks, tab sis tsuas yog siv Android API thiab nkag siab yuav txhais li cas.

Cia peb tsis ncua thiab pib sau cov lej.

1. Tsim ib qhov project

Daim ntawv no yog npaj rau cov neeg uas tau tsim ib qhov project hauv Android ntau dua ib zaug, yog li peb tshem tawm cov ntsiab lus ntawm cov khoom no. Cov cai hauv qab no yuav nthuav tawm hauv Kotlin, minSdkVersion=23.

2. Kev tso cai nkag

Txhawm rau ua haujlwm nrog Wi-nkaus los ntawm daim ntawv thov, koj yuav tsum tau txais ntau qhov kev tso cai los ntawm tus neeg siv. Raws li cov ntaub ntawvTxhawm rau luam theej duab lub network ntawm cov khoom siv nrog OS versions tom qab 8.0, ntxiv rau kev nkag mus saib lub xeev ntawm lub network ib puag ncig, koj xav tau kev nkag mus hloov lub xeev ntawm lub cuab yeej Wi-Fi module, lossis nkag mus rau kev tswj hwm (kwv yees los yog tseeb). Pib nrog version 9.0, koj yuav tsum hais kom tus neeg siv rau ob qho tib si, thiab tseem thov kom tus neeg siv qhib qhov chaw pabcuam. Tsis txhob hnov ​​qab piav qhia rau tus neeg siv tias qhov no yog Google lub siab nyiam, thiab tsis yog peb lub siab xav soj xyuas nws :)

Yog li, hauv AndroidManifest.xml peb yuav ntxiv:

    <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"/>

Thiab nyob rau hauv cov cai uas muaj qhov txuas mus rau Kev Ua Haujlwm tam sim no:

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. Tsim BroadcastReceiver thiab sau npe rau cov ntaub ntawv hloov tshiab cov xwm txheej txog kev luam theej duab Wi-Fi network ib puag ncig

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
}

Txoj kev WiFiManager.startScan nyob rau hauv cov ntaub ntawv yog cim raws li depricated txij li thaum API version 28, tab sis tawm. coj qhia siv nws.

Nyob rau hauv tag nrho, peb tau txais ib daim ntawv teev cov khoom ScanResult.

4. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ScanResult ΠΈ разбираСмся Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ…

Cia peb saib qee qhov chaw ntawm chav kawm no thiab piav qhia tias lawv txhais li cas:

SSID - Service Set Identifier yog lub npe ntawm lub network

Bssid - Basic Service Set Identifier - MAC chaw nyob ntawm lub network adapter (Wi-Fi point)

theem β€” Tau txais Cov Teeb Meem Lub Zog [dBm (Lavxias teb sab dBm) β€” Decibel, siv lub zog 1 mW.] β€” Qhov taw qhia ntawm lub zog tau txais. Siv tus nqi ntawm 0 mus rau -100, qhov ntxiv los ntawm 0, ntau lub teeb liab lub zog tau ploj ntawm txoj kev los ntawm Wi-Fi taw tes rau koj lub cuab yeej. Xav paub ntau ntxiv tuaj yeem pom, piv txwv li, ntawm Wikipedia. Ntawm no kuv yuav qhia koj tias siv cov chav kawm Android WifiManager koj tuaj yeem calibrate lub teeb liab theem ntawm qhov ntsuas los ntawm zoo heev mus rau txaus ntshai nyob rau hauv cov kauj ruam koj xaiv:

        val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
        val numberOfLevels = 5
        val level = WifiManager.calculateSignalLevel(level, numberOfLevels)

zaus β€” частота Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ Wi-Fi [Π“Ρ†]. Помимо самой частоты вас ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠ°Π½Π°Π». Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΅ΡΡ‚ΡŒ своя рабочая чистота. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания тСкста Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярным Π΄ΠΈΠ°ΠΏΠΎΠ·ΠΎΠ½ΠΎΠΌ Wi-Fi Ρ‚ΠΎΡ‡Π΅ΠΊ являСтся 2.4 GHz. Но, Ссли Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Π΅Π΅, Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π° ваш Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ Π½Π° ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ частотС, Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ Π½Π°Π·Π²Π°Π½Π½ΠΎΠΉ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… частот txheem. Qhov no yog ua kom cov ntsiab lus nyob ze ua haujlwm ntawm cov zaus sib txawv, yog li tsis cuam tshuam rau ib leeg thiab tsis sib koom txo qhov ceev thiab qhov zoo ntawm kev sib kis. Hauv qhov no, cov ntsiab lus tsis ua haujlwm ntawm ib zaus, tab sis dhau ntawm ntau zaus (parameter channelWidth), hu ua channel dav. Ntawd yog, cov ntsiab lus ua haujlwm nyob ib sab (thiab tsis yog nyob ib sab, tab sis txawm tias 3 los ntawm lawv tus kheej) cov kev cuam tshuam rau ib leeg. Koj tuaj yeem pom cov lej yooj yim no muaj txiaj ntsig, uas tso cai rau koj suav cov lej channel los ntawm tus nqi zaus rau cov ntsiab lus nrog zaus ntawm 2.4 thiab 5 Ghz:


    /* ΠΏΠΎ частотС опрСдСляСм Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°Π½Π°Π»Π° */
    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
            }
        }

muaj peev xwm - qhov nthuav dav tshaj plaws rau kev tsom xam, ua haujlwm nrog uas yuav tsum tau siv sijhawm ntau. Ntawm no "muaj peev xwm" ntawm cov ntsiab lus tau sau rau hauv kab. Hauv qhov no, koj tsis tas yuav nrhiav cov ntsiab lus ntawm txoj hlua txhais hauv cov ntaub ntawv. Nov yog qee qhov piv txwv ntawm qhov yuav muaj nyob hauv kab no:

[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. Kev nkag siab txog cov ntawv luv thiab muaj peev xwm txheeb xyuas

Nws yog tsim nyog hais tias cov chav kawm ntawm android.net.wifi.* pob yog siv nyob rau hauv lub hood los ntawm ib tug Linux nqi hluav taws xob wpa_sublicant thiab cov txiaj ntsig tau tshwm sim hauv thaj chaw muaj peev xwm yog ib daim qauv ntawm cov chij teb thaum scanning.

Peb yuav ua tsis tu ncua. Cia peb pib xav txog qhov tso zis ntawm ib hom ntawv uas cov ntsiab lus hauv kab lus sib cais los ntawm "-" kos npe:

[WPA-PSK-TKIP+CCMP]
[WPA2-PSK-CCMP]

Thawj lub ntsiab lus piav txog qhov hu ua. authentication txoj kev. Ntawd yog, dab tsi ua ntu zus ntawm kev nqis tes ua yuav tsum lub cuab yeej thiab qhov chaw nkag mus ua kom nkag mus rau qhov chaw tso cai rau nws tus kheej siv thiab yuav ua li cas rau encrypt lub payload. Thaum lub sijhawm sau cov ntawv no, cov kev xaiv ntau tshaj plaws yog WPA thiab WPA2, uas yog txhua yam khoom siv txuas ncaj qha lossis los ntawm lub npe hu ua. RADIUS neeg rau zaub mov (WPA-Enterprice) muab tus password hla ib qho channel encrypted. Feem ntau yuav, qhov chaw nkag hauv koj lub tsev muab kev sib txuas raws li cov tswv yim no. Qhov txawv ntawm qhov thib ob version thiab thawj yog tias nws muaj lub zog cipher: AES piv rau TKIP tsis ruaj ntseg. WPA3, uas yog qhov nyuaj dua thiab qib siab, kuj tau maj mam pib. Raws li txoj cai, tej zaum yuav muaj kev xaiv nrog cov kev daws teeb meem enterprice CCKM (Cisco Centralized Key Management), tab sis kuv tsis tau pom dua.

Π’ΠΎΡ‡ΠΊΠ° доступа ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ настроСна Π½Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎ MAC-адрСсу. Или, Ссли Ρ‚ΠΎΡ‡ΠΊΠ° доступа прСдоставляСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ WEP, Ρ‚ΠΎ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ фактичСски Π½Π΅Ρ‚ (сСкрСтный ΠΊΠ»ΡŽΡ‡ Ρ‚ΡƒΡ‚ ΠΈ являСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ). Π’Π°ΠΊΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ отнСсСм ΠΊ Ρ‚ΠΈΠΏΡƒ OTHER.
Kuj tseem muaj ib txoj hauv kev uas nrov hauv pej xeem wi-fi nrog zais Captive Portal Detection - ib qho kev thov kev lees paub los ntawm qhov browser. Xws li cov ntsiab lus nkag tau tshwm sim rau lub scanner li qhib (uas lawv yog los ntawm qhov pom ntawm qhov kev sib txuas ntawm lub cev). Yog li ntawd, peb faib lawv li OPEN.

Tus nqi thib ob tuaj yeem txhais tau tias yog key tswj algorithm. Qhov no yog ib qho parameter ntawm authentication txoj kev piav saum toj no. Tham txog yuav ua li cas pauv cov yuam sij encryption. Cia peb xav txog cov kev xaiv ua tau. EAP - siv nyob rau hauv WPA-Enterprice tau hais, siv cov ntaub ntawv los txheeb xyuas cov ntaub ntawv pov thawj nkag. SAE - siv nyob rau hauv advanced WPA3, ntau resistant rau brute quab yuam. PSK - qhov kev xaiv ntau tshaj plaws, suav nrog nkag mus rau tus password thiab xa mus rau hauv daim ntawv encrypted. IEEE8021X - raws li tus txheej txheem thoob ntiaj teb (tshwj tsis yog qhov kev txhawb nqa los ntawm WPA tsev neeg). OWE (Opportunistic Wireless Encryption) yog qhov txuas ntxiv ntawm IEEE 802.11 tus qauv rau cov ntsiab lus uas peb tau faib ua OPEN. OWE ua kom muaj kev ruaj ntseg ntawm cov ntaub ntawv xa mus rau lub network tsis muaj kev ruaj ntseg los ntawm kev encrypting nws. Ib qho kev xaiv kuj tuaj yeem ua tau thaum tsis muaj cov yuam sij nkag, cia peb hu qhov kev xaiv no TSIS TAU.

Qhov thib peb parameter yog qhov hu ua. encryption schemes - Yuav ua li cas raws nraim qhov cipher siv los tiv thaiv cov ntaub ntawv xa mus. Cia peb teev cov kev xaiv. WEP - siv RC4 kwj cipher, tus yuam sij zais cia yog tus yuam sij encryption, uas yog suav tias yog qhov tsis lees txais hauv ntiaj teb ntawm niaj hnub cryptography. TKIP - siv hauv WPA, CKIP - hauv WPA2. TKIP + CKIP - tuaj yeem teev nyob rau hauv cov ntsiab lus muaj peev xwm ntawm WPA thiab WPA2 rau rov qab sib raug zoo.

Hloov ntawm peb lub ntsiab lus, koj tuaj yeem nrhiav tau tus cim WEP kho siab:

[WEP]

Raws li peb tau tham saum toj no, qhov no yog qhov txaus kom tsis txhob qhia cov algorithm rau kev siv cov yuam sij, uas tsis muaj, thiab cov txheej txheem encryption, uas yog tib yam los ntawm lub neej ntawd.

Tam sim no xav txog qhov bracket:

[ESS]

no Wi-Fi kev khiav hauj lwm hom los yog Wi-Fi network topology. Koj tuaj yeem ntsib BSS (Basic Service Set) hom - thaum muaj ib qho chaw nkag los ntawm cov khoom siv sib txuas lus. Muaj nyob rau hauv lub zos networks. Raws li txoj cai, cov ntsiab lus nkag yog xav tau los txuas cov khoom siv los ntawm cov chaw sib txawv hauv zos, yog li lawv yog ib feem ntawm Extended Service Sets - ESS. IBSSs (Independent Basic Service Sets) hom qhia tias cov cuab yeej yog ib feem ntawm Peer-to-Peer network.

Koj tuaj yeem pom tus chij WPS:

[WPS]

WPS (Wi-Fi Protected Setup) yog cov txheej txheem rau kev pib pib ib nrab ntawm Wi-Fi network. Txhawm rau pib, tus neeg siv nkag mus rau tus lej 8 tus cim lossis nias lub pob ntawm lub router. Yog tias koj qhov chaw nkag mus yog thawj hom thiab lub npov no tshwm nyob ib sab ntawm lub npe ntawm koj qhov chaw nkag, koj tau pom zoo kom mus rau lub vaj huam sib luag admin thiab lov tes taw WPS nkag. Qhov tseeb yog tias feem ntau tus lej 8 tus lej PIN tuaj yeem pom los ntawm MAC chaw nyob, lossis nws tuaj yeem txheeb xyuas lub sijhawm kwv yees, uas ib tus neeg tsis ncaj ncees tuaj yeem siv tau.

6. Tsim ib tus qauv thiab parsing muaj nuj nqi

Raws li qhov peb pom saum toj no, peb yuav piav qhia txog qhov tshwm sim uas siv cov chav kawm cov ntaub ntawv:

/* схСма Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ */
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.
}

Tam sim no cia peb sau ib txoj haujlwm uas yuav txheeb xyuas cov peev txheej:


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. Saib qhov tshwm sim

Kuv mam li luam theej duab lub network thiab qhia koj qhov kuv pom. Qhia yog cov txiaj ntsig ntawm cov zis yooj yim ntawm Log.d:

Capability of Home-Home [WPA2-PSK-CCMP][ESS][WPS]
...
capabilities=[Capability(authScheme=WPA2, keyManagementAlgorithm=PSK, cipherMethod=CCMP)], topologyMode=ESS, availableWps=true

Qhov teeb meem ntawm kev txuas mus rau lub network los ntawm daim ntawv thov code tseem tsis tau tshuaj xyuas. Kuv tsuas yog hais tias txhawm rau nyeem cov passwords khaws tseg los ntawm OS ntawm lub xov tooj ntawm tes, koj xav tau cov cai hauv paus thiab kev txaus siab rau rummage los ntawm cov ntaub ntawv kaw lus nyeem wpa_supplicant.conf. Yog tias daim ntawv thov logic xav tau nkag mus rau tus password los ntawm sab nraud, kev sib txuas tuaj yeem ua los ntawm chav kawm android.net.wifi.WifiManager.

Бпасибо Egor Ponomarev rau cov khoom muaj nqis ntxiv.

Yog tias koj xav tias qee yam yuav tsum tau ntxiv lossis kho, sau rau hauv cov lus :)

Tau qhov twg los: www.hab.com

Ntxiv ib saib