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:
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
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.
Nyob rau hauv tag nrho, peb tau txais ib daim ntawv teev cov khoom
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
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. ΠΠΎ, Π΅ΡΠ»ΠΈ Π±ΡΡΡ ΡΠΎΡΠ½Π΅Π΅, ΡΠΎΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° Π²Π°Ρ ΡΠ΅Π»Π΅ΡΠΎΠ½ Π½Π° ΠΏΡΠΎΠ½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠ΅, Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ Π½Π°Π·Π²Π°Π½Π½ΠΎΠΉ. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
ΡΠ°ΡΡΠΎΡ
/* ΠΏΠΎ ΡΠ°ΡΡΠΎΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π° */
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
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
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
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