рдПрдХреЗ рджрд┐рд╡рд╢реА рдорд▓рд╛ рдЕрдБрдбреНрд░реЙрдЗрдб рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╡рд░реВрди рд╡рд╛рдп-рдлрд╛рдп рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдХреЕрди рдХрд░рд╛рдпрдЪреЗ рд╣реЛрддреЗ рдЖрдгрд┐ рдНрдХреНрд╕реЗрд╕ рдкреЙрдЗрдВрдЯреНрд╕рдмрджреНрджрд▓ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдбреЗрдЯрд╛ рдорд┐рд│рд╡рд╛рдпрдЪрд╛ рд╣реЛрддрд╛.
рдпреЗрдереЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдиреЗрдХ рдЕрдбрдЪрдгреАрдВрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛:
рд╣рд╛ рд▓реЗрдЦ рдПрдирдбреАрдХреЗ, рд╣реЕрдХрд╢рд┐рд╡рд╛рдп Android рдХреЛрдбрд╡рд░реВрди рд╡рд╛рдп-рдлрд╛рдп рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╡рд┐рд╖рдпреА рд╕рд░реНрд╡рд╕рдорд╛рд╡реЗрд╢рдХ рдбреЗрдЯрд╛ рдХрд╕рд╛ рдорд┐рд│рд╡рд╛рдпрдЪрд╛, рдкрд░рдВрддреБ рдХреЗрд╡рд│ Android API рд╡рд╛рдкрд░реВрди рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдХрд╕рд╛ рд▓рд╛рд╡рд╛рдпрдЪрд╛ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЛ.
рдЪрд▓рд╛ рдЙрд╢реАрд░ рдХрд░реВ рдирдХрд╛ рдЖрдгрд┐ рдХреЛрдб рд▓рд┐рд╣рд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛.
1. рдПрдХ рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХрд░рд╛
рд╣реА рдЯреАрдк рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ рдЬреНрдпрд╛рдВрдиреА рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│рд╛ Android рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдпрд╛ рдЖрдпрдЯрдордЪреЗ рддрдкрд╢реАрд▓ рд╡рдЧрд│рддреЛ. рдЦрд╛рд▓реАрд▓ рдХреЛрдб Kotlin рдордзреНрдпреЗ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓, minSdkVersion=23.
2. рдкреНрд░рд╡реЗрд╢ рдкрд░рд╡рд╛рдирдЧреНрдпрд╛
рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреВрди рд╡рд╛рдп-рдлрд╛рдп рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдХрдбреВрди рдЕрдиреЗрдХ рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рдШреНрдпрд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓. рдЪреНрдпрд╛ рдЕрдиреБрд╖рдВрдЧрд╛рдиреЗ
рдореНрд╣рдгреВрди, 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. ScanResult рдкрд╣рд╛ рдЖрдгрд┐ рдЕрдЯреА рд╕рдордЬреВрди рдШреНрдпрд╛
рдЪрд▓рд╛ рдпрд╛ рд╡рд░реНрдЧрд╛рддреАрд▓ рдХрд╛рд╣реА рдлреАрд▓реНрдб рдкрд╛рд╣реВ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рдЕрд░реНрде рдХрд╛рдп рддреЗ рд╡рд░реНрдгрди рдХрд░реВрдпрд╛:
рдПрд╕рдПрд╕рдЖрдпрдбреА тАФ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рд╕реЗрдЯ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рд╣реЗ рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рдирд╛рд╡ рдЖрд╣реЗ
рдмреАрдПрд╕рдПрд╕рдЖрдпрдбреА - рдмреЗрд╕рд┐рдХ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рд╕реЗрдЯ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ - рдиреЗрдЯрд╡рд░реНрдХ рдЕрдбреЕрдкреНрдЯрд░рдЪрд╛ MAC рдкрддреНрддрд╛ (рд╡рд╛рдп-рдлрд╛рдп рдкреЙрдЗрдВрдЯ)
рдкрд╛рддрд│реА тАФ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдЧреНрдирд▓ рд╕реНрдЯреНрд░реЗрдВрде рдЗрдВрдбрд┐рдХреЗрдЯрд░ [dBm (рд░рд╢рд┐рдпрди dBm) тАФ рдбреЗрд╕рд┐рдмрд▓, рд╕рдВрджрд░реНрдн рд╢рдХреНрддреА 1 mW.] тАФ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рд╕рд┐рдЧреНрдирд▓ рд╕рд╛рдорд░реНрдереНрдпрд╛рдЪрд╛ рд╕реВрдЪрдХ. 0 рддреЗ -100 рдкрд░реНрдпрдВрдд рдореВрд▓реНрдп рдШреЗрддреЗ, 0 рдкрд╛рд╕реВрди рдкреБрдвреЗ, рд╡рд╛рдп-рдлрд╛рдп рдкреЙрдИрдВрдЯрдкрд╛рд╕реВрди рддреБрдордЪреНрдпрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдХрдбреЗ рдЬрд╛рддрд╛рдирд╛ рдЕрдзрд┐рдХ рд╕рд┐рдЧреНрдирд▓ рдкреЙрд╡рд░ рдирд╖реНрдЯ рд╣реЛрддреЗ. рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓ рдЖрдврд│реВ рд╢рдХрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдпреЗрдереЗ
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val numberOfLevels = 5
val level = WifiManager.calculateSignalLevel(level, numberOfLevels)
рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ тАФ рд╡рд╛рдп-рдлрд╛рдп рдкреЙрдЗрдВрдЯ [Hz] рдЪреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛. рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддрдерд╛рдХрдерд┐рдд рдЪреЕрдиреЗрд▓рдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕реВ рд╢рдХрддреЗ. рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреВрдЪреА рд╕реНрд╡рддрдГрдЪреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╢реБрджреНрдзрддрд╛ рдЕрд╕рддреЗ. рд▓реЗрдЦрдирд╛рдЪреНрдпрд╛ рд╡реЗрд│реА, Wi-Fi рдкреЙрдЗрдВрдЯреНрд╕рдЪреА рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╢реНрд░реЗрдгреА 2.4 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
}
}
рдХреНрд╖рдорддрд╛ - рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рдордиреЛрд░рдВрдЬрдХ рдлреАрд▓реНрдб, рдХрд╛рд░реНрдп рдЬреНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рд╡реЗрд│ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпреЗрдереЗ рдмрд┐рдВрджреВрдЪреНрдпрд╛ тАЬрдХреНрд╖рдорддрд╛тАЭ рдУрд│реАрдд рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рдирдордзреНрдпреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯреЗрд╢рдирдЪреЗ рддрдкрд╢реАрд▓ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдпрд╛ рдУрд│реАрдд рдХрд╛рдп рдЕрд╕реВ рд╢рдХрддреЗ рдпрд╛рдЪреА рдпреЗрдереЗ рдХрд╛рд╣реА рдЙрджрд╛рд╣рд░рдгреЗ рдЖрд╣реЗрдд:
[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-PSK-TKIP+CCMP]
[WPA2-PSK-CCMP]
рдкрд╣рд┐рд▓рд╛ рдЕрд░реНрде рддрдерд╛рдХрдерд┐рдд рд╡рд░реНрдгрди рдХрд░рддреЛ. рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрджреНрдзрдд. рдореНрд╣рдгрдЬреЗрдЪ, рдНрдХреНрд╕реЗрд╕ рдкреЙрдИрдВрдЯрд▓рд╛ рд╕реНрд╡рддрдГрд▓рд╛ рд╡рд╛рдкрд░рддрд╛ рдпреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдкреЗрд▓реЛрдб рдХрд╕реЗ рдПрдирдХреНрд░рд┐рдкреНрдЯ рдХрд░рд╛рд╡реЗ рдпрд╛рд╕рд╛рдареА рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдЖрдгрд┐ рдНрдХреНрд╕реЗрд╕ рдкреЙрдЗрдВрдЯрдиреЗ рдХреНрд░рд┐рдпрд╛рдВрдЪрд╛ рдХреЛрдгрддрд╛ рдХреНрд░рдо рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. рд╣реЗ рдкреЛрд╕реНрдЯ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреНрдпрд╛ рд╡реЗрд│реА, рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдкрд░реНрдпрд╛рдп WPA рдЖрдгрд┐ WPA2 рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реЗ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдереЗрдЯ рдХрд┐рдВрд╡рд╛ рддрдерд╛рдХрдерд┐рдд рджреНрд╡рд╛рд░реЗ. RADIUS рд╕рд░реНрд╡реНрд╣рд░ (WPA-Enterprice) рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб рдЪреЕрдиреЗрд▓рд╡рд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреБрд░рд╡рддреЛ. рдмрд╣реБрдзрд╛, рдЖрдкрд▓реНрдпрд╛ рдШрд░рд╛рддреАрд▓ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ рдпрд╛ рдпреЛрдЬрдиреЗрдиреБрд╕рд╛рд░ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЛ. рджреБрд╕рд░реА рдЖрд╡реГрддреНрддреА рдЖрдгрд┐ рдкрд╣рд┐рд▓реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдордзреАрд▓ рдлрд░рдХ рд╣рд╛ рдЖрд╣реЗ рдХреА рддреНрдпрд╛рдд рдПрдХ рдордЬрдмреВрдд рд╕рд┐рдлрд░ рдЖрд╣реЗ: AES рд╡рд┐рд░реБрджреНрдз рдЕрд╕реБрд░рдХреНрд╖рд┐рдд TKIP. WPA3, рдЬреЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЖрдгрд┐ рдкреНрд░рдЧрдд рдЖрд╣реЗ, рддреЗ рджреЗрдЦреАрд▓ рд╣рд│реВрд╣рд│реВ рд╕рд╛рджрд░ рдХреЗрд▓реЗ рдЬрд╛рдд рдЖрд╣реЗ. рд╕реИрджреНрдзрд╛рдВрддрд┐рдХрджреГрд╖реНрдЯреНрдпрд╛, рдПрдВрдЯрд░рдкреНрд░рд╛рдИрд╕ рд╕реЛрд▓реНрдпреВрд╢рди CCKM (рд╕рд┐рд╕реНрдХреЛ рд╕реЗрдВрдЯреНрд░рд▓рд╛рдЗрдЬреНрдб рдХреА рдореЕрдиреЗрдЬрдореЗрдВрдЯ) рд╕рд╣ рдкрд░реНрдпрд╛рдп рдЕрд╕реВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ рдорд▓рд╛ рддреЛ рдХрдзреАрдЪ рд╕рд╛рдкрдбрд▓рд╛ рдирд╛рд╣реА.
рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ MAC рдкрддреНрддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЕрд╕рд╛рд╡рд╛. рдХрд┐рдВрд╡рд╛, рдЬрд░ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ рдХрд╛рд▓рдмрд╛рд╣реНрдп WEP рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд╛рдкрд░реВрди рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдд рдЕрд╕реЗрд▓, рддрд░ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХреЛрдгрддреЗрд╣реА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╛рд╣реА (рдпреЗрдереЗ рдЧреБрдкреНрдд рдХреА рд╣реА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЖрд╣реЗ). рдЖрдореНрд╣реА рдЕрд╢рд╛ рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреЗ рдЗрддрд░ рдореНрд╣рдгреВрди рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рддреЛ.
рд▓рдкрд╡рд┐рд▓реЗрд▓реНрдпрд╛ рдХреЕрдкреНрдЯрд┐рд╡реНрд╣ рдкреЛрд░реНрдЯрд▓ рдбрд┐рдЯреЗрдХреНрд╢рдирд╕рд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╛рдп-рдлрд╛рдпрдордзреНрдпреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрд╕рд▓реЗрд▓реА рдПрдХ рдкрджреНрдзрдд рджреЗрдЦреАрд▓ рдЖрд╣реЗ - рдмреНрд░рд╛рдЙрдЭрд░рджреНрд╡рд╛рд░реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдирдВрддреА. рдЕрд╕реЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ рд╕реНрдХреЕрдирд░рд▓рд╛ рдЙрдШрдбреЗ рджрд┐рд╕рддрд╛рдд (рдЬреЗ рддреЗ рднреМрддрд┐рдХ рдХрдиреЗрдХреНрд╢рдирдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди рдЖрд╣реЗрдд). рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рдУрдкрди рдореНрд╣рдгреВрди рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреЛ.
рджреБрд╕рд░реЗ рдореВрд▓реНрдп рдореНрд╣рдгреВрди рджрд░реНрд╢рд╡рд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдореБрдЦреНрдп рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЕрд▓реНрдЧреЛрд░рд┐рджрдо. рд╣реЗ рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрджреНрдзрддреАрдЪреЗ рдорд╛рдкрджрдВрдб рдЖрд╣реЗ. рдПрдирдХреНрд░рд┐рдкреНрд╢рди рдХреАрдЪреА рдиреЗрдордХреА рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХрд╢реА рд╣реЛрддреЗ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓рддреЛ. рдЪрд▓рд╛ рд╕рдВрднрд╛рд╡реНрдп рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдпрд╛. EAP - рдирдореВрдж рдХреЗрд▓реЗрд▓реНрдпрд╛ WPA-Enterprice рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓рд╛, рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд╛рдкрд░рддреЛ. SAE - рдкреНрд░рдЧрдд WPA3 рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ, рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕рд▓рд╛ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рд░реЛрдзрдХ. PSK - рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдкрд░реНрдпрд╛рдп, рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрдгрд┐ рдХреВрдЯрдмрджреНрдз рд╕реНрд╡рд░реВрдкрд╛рдд рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ. IEEE8021X - рдЖрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рдорд╛рдирдХрд╛рдиреБрд╕рд╛рд░ (WPA рдХреБрдЯреБрдВрдмрд╛рджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд рддреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ). OWE (рдСрдкреЙрд░реНрдЪреНрдпреБрдирд┐рд╕реНрдЯрд┐рдХ рд╡рд╛рдпрд░рд▓реЗрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди) рд╣реЗ рдЖрдореНрд╣реА рдУрдкрди рдореНрд╣рдгреВрди рд╡рд░реНрдЧреАрдХреГрдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреЙрдЗрдВрдЯреНрд╕рд╕рд╛рдареА IEEE 802.11 рдорд╛рдирдХрд╛рдВрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЖрд╣реЗ. OWE рдХреВрдЯрдмрджреНрдз рдХрд░реВрди рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ. рдкреНрд░рд╡реЗрд╢ рдХреА рдирд╕рддрд╛рдирд╛ рдПрдХ рдкрд░реНрдпрд╛рдп рджреЗрдЦреАрд▓ рд╢рдХреНрдп рдЖрд╣реЗ, рдЪрд▓рд╛ рдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рд▓рд╛ NONE рдореНрд╣рдгреВ рдпрд╛.
рддрд┐рд╕рд░рд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рддрдерд╛рдХрдерд┐рдд рдЖрд╣реЗ. рдПрдирдХреНрд░рд┐рдкреНрд╢рди рдпреЛрдЬрдирд╛ тАФ рдкреНрд░рд╕рд╛рд░рд┐рдд рдбреЗрдЯрд╛рдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдпрдлрд░рдЪрд╛ рдиреЗрдордХрд╛ рдХрд╕рд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЪрд▓рд╛ рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреА рдпрд╛рджреА рдХрд░реВрдпрд╛. WEP - RC4 рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ рд╡рд╛рдкрд░рддреЗ, рдЧреБрдкреНрдд рдХреА рд╣реА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЖрд╣реЗ, рдЬреА рдЖрдзреБрдирд┐рдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрдЪреНрдпрд╛ рдЬрдЧрд╛рдд рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдирд▓реА рдЬрд╛рддреЗ. TKIP - WPA рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, CKIP - WPA2 рдордзреНрдпреЗ. TKIP + CKIP - рдмреЕрдХрд╡рд░реНрдб рдХрдВрдкреЕрдЯрд┐рдмрд┐рд▓рд┐рдЯреАрд╕рд╛рдареА WPA рдЖрдгрд┐ WPA2 рдордзреНрдпреЗ рд╕рдХреНрд╖рдо рдкреЙрдЗрдВрдЯреНрд╕рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
рддреАрди рдШрдЯрдХрд╛рдВрдРрд╡рдЬреА, рддреБрдореНрд╣реА рдПрдХрд╛рдХреА WEP рдЪрд┐рдиреНрд╣ рд╢реЛрдзреВ рд╢рдХрддрд╛:
[WEP]
рдЖрдореНрд╣реА рд╡рд░ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдХреА рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХрд░рдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ, рдЬреА рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╛рд╣реА рдЖрдгрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкрджреНрдзрдд, рдЬреА рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдорд╛рди рдЖрд╣реЗ.
рдЖрддрд╛ рдпрд╛ рдмреНрд░реЕрдХреЗрдЯрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛:
[ESS]
рдпрд╛ рд╡рд╛рдп-рдлрд╛рдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдХрд┐рдВрд╡рд╛ рд╡рд╛рдп-рдлрд╛рдп рдиреЗрдЯрд╡рд░реНрдХ рдЯреЛрдкреЛрд▓реЙрдЬреА. рддреБрдореНтАНрд╣рд╛рд▓рд╛ BSS (рдореВрд▓рднреВрдд рд╕реЗрд╡рд╛ рд╕реЗрдЯ) рдореЛрдб рдпреЗрдК рд╢рдХрддреЛ - рдЬреЗрд╡реНрд╣рд╛ рдПрдХ рдЕтАНреЕрдХреНрд╕реЗрд╕ рдкреЙрдИрдВрдЯ рдЕрд╕рддреЛ рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реА рдЙрдкрдХрд░рдгреЗ рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддрд╛рдд. рд╕реНрдерд╛рдирд┐рдХ рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рдЖрдврд│реВ рд╢рдХрддреЗ. рдирд┐рдпрдорд╛рдиреБрд╕рд╛рд░, рд╡рд┐рд╡рд┐рдз рд╕реНрдерд╛рдирд┐рдХ рдиреЗрдЯрд╡рд░реНрдХрд╡рд░реВрди рдбрд┐рд╡реНрд╣рд╛рдЗрд╕реЗрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд, рдореНрд╣рдгреВрди рддреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реЗрд╡рд╛ рд╕реЗрдЯ - ESS рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗрдд. IBSSs (рд╕реНрд╡рддрдВрддреНрд░ рдореВрд▓рднреВрдд рд╕реЗрд╡рд╛ рд╕рдВрдЪ) рдкреНрд░рдХрд╛рд░ рд╕реВрдЪрд┐рдд рдХрд░рддреЛ рдХреА рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдкреАрдЕрд░-рдЯреВ-рдкреАрдЕрд░ рдиреЗрдЯрд╡рд░реНрдХрдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ.
рддреБрдореНрд╣реА WPS рдзреНрд╡рдЬ рджреЗрдЦреАрд▓ рдкрд╛рд╣реВ рд╢рдХрддрд╛:
[WPS]
WPS (рд╡рд╛рдп-рдлрд╛рдп рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕реЗрдЯрдЕрдк) рд╣рд╛ рд╡рд╛рдп-рдлрд╛рдп рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдЕрд░реНрдз-рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдкреНрд░рд╛рд░рдВрднрд╛рд╕рд╛рдареА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрд╣реЗ. рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдПрдХрддрд░ 8-рд╡рд░реНрдгрд╛рдВрдЪрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ рдХрд┐рдВрд╡рд╛ рд░рд╛рдЙрдЯрд░рд╡рд░реАрд▓ рдмрдЯрдг рджрд╛рдмрддреЛ. рдЬрд░ рддреБрдордЪрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рд╣рд╛ рдЪреЗрдХрдмреЙрдХреНрд╕ рддреБрдордЪреНрдпрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВрдЪреНрдпрд╛ рдирд╛рд╡рд╛рдкреБрдвреЗ рджрд┐рд╕рдд рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╢рд╛рд╕рди рдкреЕрдиреЗрд▓рд╡рд░ рдЬрд╛рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ WPS рдкреНрд░рд╡реЗрд╢ рдЕрдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рдЪреА рдЬреЛрд░рджрд╛рд░ рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдмрд░реНтАНрдпрд╛рдЪрджрд╛ 8-рдЕрдВрдХреА рдкрд┐рди MAC рдкрддреНрддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рд╢реЛрдзрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ рдХрд┐рдВрд╡рд╛ рддреЛ рдирдЬреАрдХрдЪреНрдпрд╛ рд╡реЗрд│реЗрдд рд╕реЛрдбрд╡рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдЬреНрдпрд╛рдЪрд╛ рдХреЛрдгреАрддрд░реА рдЕрдкреНрд░рд╛рдорд╛рдгрд┐рдХрдкрдгреЗ рдлрд╛рдпрджрд╛ рдШреЗрдК рд╢рдХрддреЛ.
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
рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдбрд╡рд░реВрди рдиреЗрдЯрд╡рд░реНрдХрд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдореБрджреНрджрд╛ рддрдкрд╛рд╕рд▓рд╛ рдЧреЗрд▓рд╛ рдирд╛рд╣реА. рдореА рдлрдХреНрдд рдПрд╡рдвреЗрдЪ рдореНрд╣рдгреЗрди рдХреА рдореЛрдмрд╛рдИрд▓ рдбрд┐рд╡реНтАНрд╣рд╛рдЗрд╕рдЪреНтАНрдпрд╛ OS рд╡рд░реВрди рдЬрддрди рдХреЗрд▓реЗрд▓реЗ рдкрд╛рд╕рд╡рд░реНрдб рд╡рд╛рдЪрдгреНтАНрдпрд╛рд╕рд╛рдареА, рддреБрдореНтАНрд╣рд╛рд▓рд╛ рдореВрд│ рдЕрдзрд┐рдХрд╛рд░ рдЖрдгрд┐ wpa_supplicant.conf рд╡рд╛рдЪрдгреНтАНрдпрд╛рд╕рд╛рдареА рдлрд╛рдИрд▓ рд╕рд┐рд╕реНтАНрдЯрдордордзреВрди рд░рдореНтАНрдЬ рдХрд░рдгреНтАНрдпрд╛рдЪреА рдЗрдЪреНрдЫрд╛ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНтАНрдпрдХ рдЖрд╣реЗ. рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХрд▓рд╛ рдмрд╛рд╣реЗрд░реВрди рдкрд╛рд╕рд╡рд░реНрдб рдПрдВрдЯрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдХрдиреЗрдХреНрд╢рди рдХреНрд▓рд╛рд╕рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ
╨б╨┐╨░╤Б╨╕╨▒╨╛
рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдЯрдд рдЕрд╕реЗрд▓ рдХреА рдХрд╛рд╣реАрддрд░реА рдЬреЛрдбрдгреЗ рдХрд┐рдВрд╡рд╛ рджреБрд░реБрд╕реНрдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛ :)
рд╕реНрддреНрд░реЛрдд: www.habr.com