āĻāĻāĻĻāĻŋāĻ¨ āĻāĻŽāĻžāĻ° āĻ
ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§āĻĄ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻĨā§āĻā§ Wi-Fi āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻā§āĻ˛āĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻŦāĻŋāĻļāĻĻ āĻĄā§āĻāĻž āĻĒā§āĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛:
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ NDK, āĻšā§āĻ¯āĻžāĻ āĻāĻžāĻĄāĻŧāĻžāĻ Android āĻā§āĻĄ āĻĨā§āĻā§ Wi-Fi āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻŦāĻŋāĻ¸ā§āĻ¤ā§āĻ¤ āĻĄā§āĻāĻž āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° Android API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŦāĻ āĻā§āĻāĻžāĻŦā§ āĻāĻāĻŋ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻŦā§āĻāĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤
āĻāĻ¸ā§āĻ¨ āĻĻā§āĻ°āĻŋ āĻ¨āĻž āĻāĻ°ā§ āĻā§āĻĄ āĻ˛ā§āĻāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŋāĨ¤
1. āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻāĻ āĻ¨ā§āĻāĻāĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻžāĻ°āĻž āĻāĻāĻžāĻ§āĻŋāĻāĻŦāĻžāĻ° āĻāĻāĻāĻŋ Android āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻā§āĻ¨, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻāĻ āĻāĻāĻā§āĻŽā§āĻ° āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻŦāĻžāĻĻ āĻĻāĻŋāĻāĨ¤ āĻ¨ā§āĻā§āĻ° āĻā§āĻĄāĻāĻŋ āĻā§āĻāĻ˛āĻŋāĻ¨ā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§, minSdkVersion=23ā§ˇ
2. āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ā§āĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ
āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĨā§āĻā§ Wi-Fi āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻ¨āĻŋāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, 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. āĻāĻāĻāĻŋ BroadcastReceiver āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ Wi-Fi āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻĄā§āĻāĻž āĻāĻĒāĻĄā§āĻ āĻāĻā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸āĻĻāĻ¸ā§āĻ¯āĻ¤āĻž āĻ¨āĻŋāĻ¨
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiScanReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
if (success) {
scanSuccess()
}
}
}
val intentFilter = IntentFilter()
/* ĐŋОдĐŋиŅŅваĐĩĐŧŅŅ ĐŊĐ° ŅООйŅĐĩĐŊиŅ Đž ĐŋĐžĐģŅŅĐĩĐŊии ĐŊОвŅŅ
ŅĐĩСŅĐģŅŅĐ°ŅОв ŅĐēĐ°ĐŊиŅОваĐŊиŅ */
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
context.registerReceiver(wifiScanReceiver, intentFilter)
val success = wifiManager.startScan()
if (!success) {
/* ŅŅĐž-ŅĐž ĐŊĐĩ ĐŋĐžĐģŅŅиĐģĐžŅŅ ĐŋŅи СаĐŋŅŅĐēĐĩ ŅĐēĐ°ĐŊиŅОваĐŊиŅ, ĐŋŅОвĐĩŅŅŅĐĩ вŅĐ´Đ°ĐŊŅĐĩ ŅаСŅĐĩŅĐĩĐŊиŅ */
}
....
private fun scanSuccess() {
/* вОŅ ĐžĐŊи, ŅĐĩСŅĐģŅŅĐ°ŅŅ ŅĐēĐ°ĐŊиŅОваĐŊиŅ */
val results: List<ScanResult> = wifiManager.scanResults
}
āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ā§ WiFiManager.startScan āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ API āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 28 āĻĨā§āĻā§ āĻŦāĻā§āĻāĻŋāĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻŦāĻ¨ā§āĻ§āĨ¤
āĻŽā§āĻ, āĻāĻŽāĻ°āĻž āĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒā§āĻ¯āĻŧā§āĻāĻŋ
4. ScanResult āĻĻā§āĻā§āĻ¨ āĻāĻŦāĻ āĻļāĻ°ā§āĻ¤āĻžāĻŦāĻ˛ā§ āĻŦā§āĻā§āĻ¨
āĻāĻ¸ā§āĻ¨ āĻāĻ āĻļā§āĻ°ā§āĻŖā§āĻ° āĻāĻŋāĻā§ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻĻā§āĻāĻŋ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ āĻ°ā§āĻĨ āĻā§ āĻ¤āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŋ:
SSID āĻāĻ° â āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻ¸ā§āĻ āĻāĻāĻĄā§āĻ¨ā§āĻāĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻšāĻ˛ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻ¨āĻžāĻŽ
āĻŦāĻŋāĻāĻ¸āĻāĻ¸āĻāĻāĻĄāĻŋ - āĻŦā§āĻ¸āĻŋāĻ āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻ¸ā§āĻ āĻāĻāĻĄā§āĻ¨ā§āĻāĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° - āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ ā§āĻ¯āĻžāĻĄāĻžāĻĒā§āĻāĻžāĻ°ā§āĻ° MAC āĻ āĻŋāĻāĻžāĻ¨āĻž (āĻāĻ¯āĻŧāĻžāĻ-āĻĢāĻžāĻ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ)
āĻ¸ā§āĻ¤āĻ° â āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ¸āĻāĻā§āĻ¤ āĻļāĻā§āĻ¤āĻŋ āĻ¸ā§āĻāĻ [dBm (āĻ°āĻžāĻļāĻŋāĻ¯āĻŧāĻžāĻ¨ dBm) â āĻĄā§āĻ¸āĻŋāĻŦā§āĻ˛, āĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° 1 mWāĨ¤] â āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ¸āĻāĻā§āĻ¤ āĻļāĻā§āĻ¤āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻāĻāĨ¤ 0 āĻĨā§āĻā§ -100 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨ āĻ¨ā§āĻ¯āĻŧ, 0 āĻĨā§āĻā§ āĻ¯āĻ¤ āĻŦā§āĻļāĻŋ, Wi-Fi āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻĨā§āĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻĄāĻŋāĻāĻžāĻāĻ¸ā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻĨā§ āĻ¤āĻ¤ āĻŦā§āĻļāĻŋ āĻ¸āĻŋāĻāĻ¨ā§āĻ¯āĻžāĻ˛ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§ āĻā§āĻā§āĨ¤ āĻāĻ°ā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ
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, āĻ¯āĻž āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻ¨ā§āĻ¨āĻ¤, āĻ§ā§āĻ°ā§ āĻ§ā§āĻ°ā§ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻā§āĻā§āĨ¤ āĻ¤āĻžāĻ¤ā§āĻ¤ā§āĻŦāĻŋāĻāĻāĻžāĻŦā§, āĻāĻ¨ā§āĻāĻžāĻ°āĻĒā§āĻ°āĻžāĻāĻ āĻ¸āĻ˛āĻŋāĻāĻļāĻ¨ āĻ¸āĻŋāĻ¸āĻŋāĻā§āĻāĻŽ (āĻ¸āĻŋāĻ¸āĻā§ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻžāĻ˛āĻžāĻāĻāĻĄ āĻā§ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻŽā§āĻ¨ā§āĻ) āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻāĻāĻ¨āĻ āĻĒāĻžāĻāĻ¨āĻŋāĨ¤
āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻāĻŋ MAC āĻ āĻŋāĻāĻžāĻ¨āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ
āĻĨāĻŦāĻž, āĻ¯āĻĻāĻŋ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§ WEP āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĄā§āĻāĻž āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°ā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻ¸āĻ˛ā§ āĻā§āĻ¨āĻ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻ¨ā§āĻ (āĻāĻāĻžāĻ¨ā§ āĻā§āĻĒāĻ¨ āĻā§āĻāĻŋ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻā§)āĨ¤ āĻāĻŽāĻ°āĻž āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻļā§āĻ°ā§āĻŖā§āĻŦāĻĻā§āĻ§.
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻāĻāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻ˛ā§āĻāĻžāĻ¨ā§ āĻā§āĻ¯āĻžāĻĒāĻāĻŋāĻ āĻĒā§āĻ°ā§āĻāĻžāĻ˛ āĻ¸āĻ¨āĻžāĻā§āĻ¤āĻāĻ°āĻŖ āĻ¸āĻš āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻāĻ¯āĻŧāĻžāĻ-āĻĢāĻžāĻ-āĻ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ - āĻāĻāĻāĻŋ āĻŦā§āĻ°āĻžāĻāĻāĻžāĻ°ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻ
āĻ¨ā§āĻ°ā§āĻ§āĨ¤ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°ā§āĻ° āĻāĻžāĻā§ āĻā§āĻ˛āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ (āĻ¯ā§āĻāĻŋ āĻ¤āĻžāĻ°āĻž āĻļāĻžāĻ°ā§āĻ°āĻŋāĻ āĻ¸āĻāĻ¯ā§āĻā§āĻ° āĻĻā§āĻˇā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§)āĨ¤ āĻ
āĻ¤āĻāĻŦ, āĻāĻŽāĻ°āĻž āĻ¤āĻžāĻĻā§āĻ° OPEN āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻļā§āĻ°ā§āĻŖā§āĻŦāĻĻā§āĻ§ āĻāĻ°āĻŋāĨ¤
āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻŽāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻā§ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ. āĻāĻāĻŋ āĻāĻĒāĻ°ā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻāĻāĻāĻŋ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĨ¤ āĻ āĻŋāĻ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻā§ āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¸ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛ā§āĨ¤ āĻāĻ¸ā§āĻ¨ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻŋāĨ¤ 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]
āĻāĻ Wi-Fi āĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻŽā§āĻĄ āĻŦāĻž Wi-Fi āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻĒā§āĻ˛āĻāĻŋ. āĻāĻĒāĻ¨āĻŋ BSS (āĻŦā§āĻ¸āĻŋāĻ āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻ¸ā§āĻ) āĻŽā§āĻĄā§āĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ - āĻ¯āĻāĻ¨ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻĨāĻžāĻā§ āĻ¯āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻĄāĻŋāĻāĻžāĻāĻ¸āĻā§āĻ˛āĻŋ āĻ¯ā§āĻāĻžāĻ¯ā§āĻ āĻāĻ°ā§āĨ¤ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§āĨ¤ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĨā§āĻā§ āĻĄāĻŋāĻāĻžāĻāĻ¸āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ āĻ¤āĻžāĻ°āĻž āĻŦāĻ°ā§āĻ§āĻŋāĻ¤ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ¸ā§āĻ - ESS-āĻāĻ° āĻ āĻāĻļāĨ¤ IBSSs (āĻ¸ā§āĻŦāĻžāĻ§ā§āĻ¨ āĻŦā§āĻ¸āĻŋāĻ āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻ¸ā§āĻ) āĻĒā§āĻ°āĻāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§ āĻ¯ā§ āĻĄāĻŋāĻāĻžāĻāĻ¸āĻāĻŋ āĻāĻāĻāĻŋ āĻĒāĻŋāĻ¯āĻŧāĻžāĻ°-āĻā§-āĻĒāĻŋāĻ¯āĻŧāĻžāĻ° āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻ āĻāĻļāĨ¤
āĻāĻĒāĻ¨āĻŋ WPS āĻĒāĻ¤āĻžāĻāĻžāĻ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
[WPS]
WPS (Wi-Fi āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻ¸ā§āĻāĻāĻĒ) āĻšāĻ˛ āĻāĻāĻāĻŋ Wi-Fi āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻāĻ§āĻž-āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻāĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻāĻ˛āĨ¤ āĻāĻ°āĻŽā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻšāĻ¯āĻŧ āĻāĻāĻāĻŋ 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