рд╡рд╛рдИ-рдлрд╛рдИ рдФрд░ рдХрдИ рдЕрдиреНрдп рд╕рдВрдХреНрд╖рд┐рдкреНрддрд╛рдХреНрд╖рд░ред рдмрд┐рдирд╛ рдлреВрд▓реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╡рд╛рдИ-рдлрд╛рдИ рдиреЛрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдПрдХ рджрд┐рди рдореБрдЭреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╡рд╛рдИ-рдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдХрдИ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: рдСрдл.рдПрдВрдбреНрд░реЙрдЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╡рд░реНрдгрд┐рдд рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдкрджрд╛рд╡рдирдд рд╣реЛ рдЧрдП (рдПрдкреАрдЖрдИ рд╕реНрддрд░ > 26), рдЬреЛ рдЗрд╕рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ; рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХреБрдЫ рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдиреНрдпреВрдирддрдо рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдХреНрд╖рд╛ рдХреА рдХреНрд╖рдорддрд╛рдПрдБ рдлрд╝реАрд▓реНрдб рд╕реНрдХреИрди рдкрд░рд┐рдгрд╛рдо рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)ред рддреАрд╕рд░реА рдХрдард┐рдирд╛рдИ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рд╡рд╛рдИ-рдлрд╛рдИ рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд╛рдЙрдЯрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХрдИ рд╕рдВрдХреНрд╖рд┐рдкреНрддрд╛рдХреНрд╖рд░реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдФрд░ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП (рдирд┐рд░реНрдгрдп рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реИ рдФрд░ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред

рдпрд╣ рдЖрд▓реЗрдЦ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдирдбреАрдХреЗ, рд╣реИрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЛрдб рд╕реЗ рд╡рд╛рдИ-рдлрд╛рдИ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рд╕рдордЭреЗрдВ рдХрд┐ рдЗрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХрд░реЗрдВред

рдЖрдЗрдП рджреЗрд░ рди рдХрд░реЗрдВ рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред

1. рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ

рдпрд╣ рдиреЛрдЯ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдЖрдЗрдЯрдо рдХрд╛ рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдХреЛрдЯрд▓рд┐рди, minSdkVersion=23 рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

2. рдкреНрд░рд╡реЗрд╢ рдЕрдиреБрдорддрд┐рдпрд╛рдБ

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╡рд╛рдИ-рдлрд╛рдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрдИ рдЕрдиреБрдорддрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рд▓реЗрдЦрди8.0 рдХреЗ рдмрд╛рдж рдХреЗ рдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдкрд╣реБрдВрдЪ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╡рд╛рдИ-рдлрд╛рдИ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (рдЕрдиреБрдорд╛рдирд┐рдд) рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рд╕рдЯреАрдХ)ред рд╕рдВрд╕реНрдХрд░рдг 9.0 рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рд╕реНрдерд╛рди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдпрд╣ рд╕рдордЭрд╛рдирд╛ рди рднреВрд▓реЗрдВ рдХрд┐ рдпрд╣ Google рдХреА рд╕рдирдХ рд╣реИ, рди рдХрд┐ рдЙрд╕рдХреА рдЬрд╛рд╕реВрд╕реА рдХрд░рдиреЗ рдХреА рд╣рдорд╛рд░реА рдЗрдЪреНрдЫрд╛ :)

рддреЛ, AndroidManifest.xml рдореЗрдВ рд╣рдо рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:

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

рдФрд░ рдЙрд╕ рдХреЛрдб рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ:

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. рдПрдХ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рд░рд┐рд╕реАрд╡рд░ рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╛рдИ-рдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдЗрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ

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
}

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ WiFiManager.startScan рдкрджреНрдзрддрд┐ рдХреЛ API рд╕рдВрд╕реНрдХрд░рдг 28 рд╕реЗ рдЕрд╡рд┐рдХрд╕рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдВрдж рд╣реИред рдЧрд╛рдЗрдб рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рд╕реНрдХреИрди рдкрд░рд┐рдгрд╛рдо.

4. рд╕реНрдХреИрдирд░рд┐рдЬрд▓реНрдЯ рджреЗрдЦреЗрдВ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЛ рд╕рдордЭреЗрдВ

рдЖрдЗрдП рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдмрддрд╛рдПрдВ рдХрд┐ рдЙрдирдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ:

рдПрд╕рдПрд╕рдЖрдИрдбреА тАФ рд╕рд░реНрд╡рд┐рд╕ рд╕реЗрдЯ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдирд╛рдо рд╣реИ

BSSID - рдореВрд▓ рд╕реЗрд╡рд╛ рд╕реЗрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ - рдиреЗрдЯрд╡рд░реНрдХ рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛ рдореИрдХ рдкрддрд╛ (рд╡рд╛рдИ-рдлрд╛рдИ рдкреЙрдЗрдВрдЯ)

рд╕реНрддрд░ - рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдЧреНрдирд▓ рд╢рдХреНрддрд┐ рд╕рдВрдХреЗрддрдХ [рдбреАрдмреАрдПрдо (рд░реВрд╕реА рдбреАрдмреАрдПрдо) - рдбреЗрд╕реАрдмрд▓, рд╕рдВрджрд░реНрдн рд╢рдХреНрддрд┐ 1 рдореЗрдЧрд╛рд╡рд╛рдЯред] - рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдЧреНрдирд▓ рд╢рдХреНрддрд┐ рдХрд╛ рдПрдХ рд╕рдВрдХреЗрддрдХред 0 рд╕реЗ -100 рддрдХ рдХрд╛ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ, 0 рд╕реЗ рдЬрд┐рддрдирд╛ рдЖрдЧреЗ, рд╡рд╛рдИ-рдлрд╝рд╛рдИ рдмрд┐рдВрджреБ рд╕реЗ рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рддрдХ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЙрддрдиреА рд╣реА рдЕрдзрд┐рдХ рд╕рд┐рдЧреНрдирд▓ рд╢рдХреНрддрд┐ рдЦреЛ рдЬрд╛рддреА рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛. рдпрд╣рд╛рдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рдИрдлрд╝рд╛рдИ рдкреНрд░рдмрдВрдзрдХ рдЖрдк рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдЪрд░рдг рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рд╕реНрддрд░ рдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реЗ рднрдпрд╛рдирдХ рддрдХ рдХреЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдЖрд╡реГрддреНрддрд┐ - рд╡рд╛рдИ-рдлрд╛рдИ рдкреЙрдЗрдВрдЯ рдХреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдЖрд╡реГрддреНрддрд┐ [рд╣рд░реНрдЯреНрдЬ]ред рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рддрдерд╛рдХрдерд┐рдд рдЪреИрдирд▓ рдореЗрдВ рднреА рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреА рдЕрдкрдиреА рдкрд░рд┐рдЪрд╛рд▓рди рд╢реБрджреНрдзрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд╡рд╛рдИ-рдлрд╝рд╛рдИ рдкреЙрдЗрдВрдЯ рдХреА рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд░реЗрдВрдЬ 2.4 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝ рд╣реИред рд▓реЗрдХрд┐рди, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд┐рдВрджреБ рдЖрдкрдХреЗ рдлреЛрди рдкрд░ рдирд╛рдорд┐рдд рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдХрд░реАрдм рдПрдХ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдЖрд╡реГрддреНрддрд┐ рдкрд░ рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕рдВрдЧрдд рдЖрд╡реГрддреНрддрд┐рдпрд╛рдБ рдорд╛рдирдХреАрдХреГрдд. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрд╕-рдкрд╛рд╕ рдХреЗ рдмрд┐рдВрджреБ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рд╣реЛ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рдЧрддрд┐ рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдкрд░рд╕реНрдкрд░ рдХрдореА рди рд╣реЛред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд┐рдВрджреБ рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ (рдкреИрд░рд╛рдореАрдЯрд░) рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЪреИрдирд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ), рдЬрд┐рд╕реЗ рдЪреИрдирд▓ рдЪреМрдбрд╝рд╛рдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЖрд╕рдиреНрди (рдФрд░ рди рдХреЗрд╡рд▓ рдЖрд╕рдиреНрди, рдмрд▓реНрдХрд┐ рдЦреБрдж рд╕реЗ 3 рднреА) рдЪреИрдирд▓реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╣ рд╕рд░рд▓ рдХреЛрдб рдЙрдкрдпреЛрдЧреА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ 2.4 рдФрд░ 5 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡реГрддреНрддрд┐ рдорд╛рди рд╕реЗ рдЪреИрдирд▓ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


    /* ╨┐╨╛ ╤З╨░╤Б╤В╨╛╤В╨╡ ╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╨╡╨╝ ╨╜╨╛╨╝╨╡╤А ╨║╨░╨╜╨░╨╗╨░ */
    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
            }
        }

рдХреНрд╖рдорддрд╛рдУрдВ - рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖реЗрддреНрд░, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдмрд┐рдВрджреБ рдХреА "рдХреНрд╖рдорддрд╛рдПрдВ" рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рджреЗрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:

[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. рд╕рдВрдХреНрд╖рд┐рдкреНрддреАрдХрд░рдг рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛

рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ android.net.wifi.* рдкреИрдХреЗрдЬ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдирдХреНрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рд╣реБрдб рдХреЗ рддрд╣рдд рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВ wpa_supplicant рдФрд░ рдХреНрд╖рдорддрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рд┐рдгрд╛рдо рд╕реНрдХреИрди рдХрд░рддреЗ рд╕рдордп рдлрд╝реНрд▓реИрдЧ рдлрд╝реАрд▓реНрдб рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реИред

рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВрдЧреЗ. рдЖрдЗрдП рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЛрд╖реНрдардХ рдХреЗ рдЕрдВрджрд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ "-" рдЪрд┐рд╣реНрди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

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

рдкрд╣рд▓рд╛ рдЕрд░реНрде рддрдерд╛рдХрдерд┐рдд рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдорд╛рдгрди рд╡рд┐рдзрд┐. рдЕрд░реНрдерд╛рддреН, рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреЗрд▓реЛрдб рдХреЛ рдХреИрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, рд╕рдмрд╕реЗ рдЖрдо рд╡рд┐рдХрд▓реНрдк WPA рдФрд░ WPA2 рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдпрд╛ рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реАрдзреЗ рдпрд╛ рддрдерд╛рдХрдерд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред RADIUS рд╕рд░реНрд╡рд░ (WPA-Enterprice) рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЪреИрдирд▓ рдкрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЗ рдШрд░ рдореЗрдВ рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдордЬрдмреВрдд рд╕рд┐рдлрд░ рд╣реИ: рдПрдИрдПрд╕ рдмрдирд╛рдо рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЯреАрдХреЗрдЖрдИрдкреАред WPA3, рдЬреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рдЙрдиреНрдирдд рд╣реИ, рдХреЛ рднреА рдзреАрд░реЗ-рдзреАрд░реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрд╕ рд╕рдорд╛рдзрд╛рди рд╕реАрд╕реАрдХреЗрдПрдо (рд╕рд┐рд╕реНрдХреЛ рд╕реЗрдВрдЯреНрд░рд▓рд╛рдЗрдЬреНрдб рдХреА рдореИрдиреЗрдЬрдореЗрдВрдЯ) рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдХрднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ред

рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рдХреЛ рдореИрдХ рдкрддреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛, рдпрджрд┐ рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рдкреБрд░рд╛рдиреЗ WEP рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╣реАрдВ рд╣реИ (рдпрд╣рд╛рдВ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рд╣реИ)ред рд╣рдо рдРрд╕реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЕрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рднреА рд╣реИ рдЬреЛ рдЫрд┐рдкреЗ рд╣реБрдП рдХреИрдкреНрдЯрд┐рд╡ рдкреЛрд░реНрдЯрд▓ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╛рдИ-рдлрд╛рдИ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ - рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдиреБрд░реЛрдзред рдРрд╕реЗ рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рд╕реНрдХреИрдирд░ рдХреЛ рдЦреБрд▓реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ (рдЬреЛ рд╡реЗ рднреМрддрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╣реИрдВ)ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЦреБрд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред

рджреВрд╕рд░реЗ рдорд╛рди рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреБрдВрдЬреА рдкреНрд░рдмрдВрдзрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо. рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдИрдПрдкреА - рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдбрдмреНрд▓реНрдпреВрдкреАрдП-рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджрд░реНрдЬ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдбреЗрдЯрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред SAE - рдЙрдиреНрдирдд WPA3 рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреНрд░реВрд░ рдмрд▓ рдХреЗ рдкреНрд░рддрд┐ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рд░реЛрдзреА рд╣реИред рдкреАрдПрд╕рдХреЗ - рд╕рдмрд╕реЗ рдЖрдо рд╡рд┐рдХрд▓реНрдк, рдЗрд╕рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред IEEE8021X - рдПрдХ рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ (WPA рдкрд░рд┐рд╡рд╛рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдорд╛рдирдХ рд╕реЗ рднрд┐рдиреНрди)ред OWE (рдЕрд╡рд╕рд░рд╡рд╛рджреА рд╡рд╛рдпрд░рд▓реЗрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди) рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП IEEE 802.11 рдорд╛рдирдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ OPEN рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИред OWE рдХрд┐рд╕реА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдХреЗ рдЙрд╕рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк рддрдм рднреА рд╕рдВрднрд╡ рд╣реИ рдЬрдм рдХреЛрдИ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рди рд╣реЛ, рдЖрдЗрдП рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ NONE рдХрд╣рддреЗ рд╣реИрдВред

рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рддрдерд╛рдХрдерд┐рдд рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдпреЛрдЬрдирд╛рдПрдВ -рд╕рдВрдЪрд░рд┐рдд рдбреЗрдЯрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд░ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВред WEP - RC4 рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдзреБрдирд┐рдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред TKIP - WPA рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд, CKIP - WPA2 рдореЗрдВред TKIP+CKIP - рдмреИрдХрд╡рд░реНрдб рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП WPA рдФрд░ WPA2 рдореЗрдВ рд╕рдХреНрд╖рдо рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддреАрди рддрддреНрд╡реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ рдЕрдХреЗрд▓рд╛ WEP рдЪрд┐рд╣реНрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

[WEP]

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА, рдпрд╣ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╡рд┐рдзрд┐, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИред

рдЕрдм рдЗрд╕ рдмреНрд░реИрдХреЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

[ESS]

рдпрд╣ рд╡рд╛рдИ-рдлрд╝рд╛рдИ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдпрд╛ рд╡рд╛рдИ-рдлрд╝рд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдЯреЛрдкреЛрд▓реЙрдЬреА. рдЖрдкрдХреЛ рдмреАрдПрд╕рдПрд╕ (рдмреЗрд╕рд┐рдХ рд╕рд░реНрд╡рд┐рд╕ рд╕реЗрдЯ) рдореЛрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ - рдЬрдм рдПрдХ рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯреЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдкреЙрдЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реЗрд╡рд╛ рд╕реЗрдЯ - рдИрдПрд╕рдПрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред IBSS (рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдмреЗрд╕рд┐рдХ рд╕рд░реНрд╡рд┐рд╕ рд╕реЗрдЯреНрд╕) рдкреНрд░рдХрд╛рд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдЖрдк WPS рдзреНрд╡рдЬ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

[WPS]

WPS (рд╡рд╛рдИ-рдлрд╛рдИ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕реЗрдЯрдЕрдк) рд╡рд╛рдИ-рдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЕрд░реНрдз-рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рддреЛ 8-рдЕрдХреНрд╖рд░ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд░рд╛рдЙрдЯрд░ рдкрд░ рдПрдХ рдмрдЯрди рджрдмрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЖрдкрдХреЗ рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рдирд╛рдо рдХреЗ рдЖрдЧреЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдкрд░ рдЬрд╛рдиреЗ рдФрд░ WPS рдПрдХреНрд╕реЗрд╕ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдХреНрд╕рд░ 8 рдЕрдВрдХреЛрдВ рдХрд╛ рдкрд┐рди рдореИрдХ рдкрддреЗ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдирд┐рдХрдЯ рд╕рдордп рдореЗрдВ рд╕реБрд▓рдЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рдмреЗрдИрдорд╛рдиреА рд╕реЗ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИред

6. рдПрдХ рдореЙрдбрд▓ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ

рдКрдкрд░ рд╣рдореЗрдВ рдЬреЛ рдкрддрд╛ рдЪрд▓рд╛ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ:

/* ╤Б╤Е╨╡╨╝╨░ ╨░╤Г╤В╨╡╨╜╤В╨╕╤Д╨╕╨║╨░╤Ж╨╕╨╕ */
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.
}

рдЕрдм рдЖрдЗрдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рдХреНрд╖рдорддрд╛рдУрдВ рдлрд╝реАрд▓реНрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛:


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. рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ

рдореИрдВ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдХреИрди рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рдорд┐рд▓рд╛ред Log.d рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░рд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ:

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

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рдЧрдИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдУрдПрд╕ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░реВрдЯ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ wpa_supplicationt.conf рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ android.net.wifi.WifiManager.

рдзрдиреНрдпрд╡рд╛рдж рдИрдЧреЛрд░ рдкреЛрдиреЛрдорд╛рд░реЗрд╡ рдмрд╣реБрдореВрд▓реНрдп рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд▓рд┐рдП.

рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╕реБрдзрд╛рд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ :)

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ