在Android中,我们如果想知道周围的WIFI热点,以及这些认证方式怎么办?
答案是我们可以用WifiManager.getScanResults来获取当前扫描出的热点 用ScanResult.capabilities来获取认证方式等。
看代码
private fun getCurrentWifi() {
mScanResult.clear()
val scanResult = wifiManager.scanResults
mScanResult.addAll(scanResult)
val stringBuilder = StringBuilder()
mScanResult.forEach {
stringBuilder.append(it.SSID)
.append(" ")
.append(it.BSSID)
.append(it.capabilities)
.append("\n")
}
binding.tvWifiList.text = stringBuilder.toString()
logcat(stringBuilder.toString())
ToastManager.showToast("获取完毕 个数为:" + mScanResult.size)
}
Google官方对capabilities的描述是
Describes the authentication, key management, and encryption schemes supported by the access point. 描述该热点的认证、秘钥管理和加密方案
如上述代码,我们看下打印的结果
imlog : THEMERCURY 04:d7:a5:c4:73:70[WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS]
imlog : DoDoDo 42:e0:d0:35:27:8b[WPA2-PSK-CCMP][ESS][WPS]
imlog : DoDoDo 42:e0:d0:35:27:8f[WPA2-PSK-CCMP][ESS][WPS]
imlog : 92:53:c3:da:45:b4[ESS]
imlog : Wi-Fi6 8c:53:c3:da:45:b4[WPA2-PSK-CCMP+TKIP][WPA-PSK-CCMP+TKIP][ESS][WPS]
imlog : CMCC-e2ax 00:cf:c0:b5:8e:e8[WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS][WPS]
imlog : 74:60:fa:86:b4:31[WPA2-PSK-CCMP][ESS]
imlog : ChinaNet-401 68:a0:3e:4a:91:d0[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS][WPS]
imlog : ChinaNet-3Ger e8:84:c6:c2:f1:40[WPA2-PSK-CCMP+TKIP][WPA-PSK-CCMP+TKIP][ESS][WPS]
imlog : TP-LINK_AA62 e4:d3:32:e3:aa:62[WPA2-PSK-CCMP][WPA-PSK-CCMP][ESS][WPS]
imlog : CMCC-yytA d0:59:19:b8:18:fa[WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS]
imlog : 04:d7:a5:c4:73:75[ESS]
imlog : THEMERCURY 04:d7:a5:c4:73:73[WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS]
imlog : CMCC-uGUG 80:c7:c5:43:a1:b7[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]
imlog : TP-LINK_702 9c:21:6a:35:da:48[WPA2-PSK-CCMP][WPA-PSK-CCMP][ESS][WPS]
imlog : Xiaomi_0 88:c3:97:c8:23:b0[WPA2-PSK+SAE-CCMP][ESS][WPS]
imlog : ChinaNet-Zf2m ec:f8:eb:4c:54:f9[WPA-PSK-CCMP+TKIP][ESS]
imlog : WATER b8:08:d7:4e:8f:70[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS][WPS]
通过上面的日志我们可以看到,capabilities的内容是类似于 [WPA2-PSK-CCMP][ESS][WPS] 的字符串,看到这个之后,是不是感觉
我们这篇文章就来介绍capabilities的各个字段到底是什么
简单讲,capabilities的格式是 [认证标准+秘钥管理+加密方案]
1. WEP(Wired Equivalent Privacy) 有线等效保护
这是一种早期使用的加密认证方式,现在已经弃用。简单先回顾一下它的历史。
它是802.11b标准里定义了一种用于无线局域网(WLAN)的安全性协议,它被有线LAN具有同等级别的安全性(所以翻译是有线等效保护,哈哈)。但是,有线LAN依赖物理上的连接啊,所以天然比WLAN安全。
WEP的认证方式分为两种
- open system authentication 开放式系统认证:顾名思义,没有认证,随便连接。
- shared key authentication 共有键认证:认证一共有四个步骤,如下
- 客户端向接入端发送认证请求
- 接入点返回一个明文
- 客户端利用预存的秘钥对明文加密,再次向接入点发出认证请求
- 接入点数据包进行解密,比较明文,并决定是否接受请求。
这个认证真是粗糙啊。
好了,知道他被废弃了就行了,下面看取代他的WPA。
2. WPA(Wi-Fi Protected Access)
WPA可以被分为WPA、WPA2、WPA3三个标准。人们在发现WEP的几个严重弱点后,推出了WPA,WPA已经实现了绝大部分IEEE 802.11i标准,它可以用在几乎所有的无线网卡上。随后,Wi-Fi联盟推出了WPA2,WPA2与WPA的主要区别是,WPA2使用了更加安全的加密技术AES, 在2018年1月,Wi-Fi联盟需要发行包含众多安全性改进的WPA3。
WPA也可以分为家用的WPA-PSK(Pre-Shared Key)与企业用的WPA-Enterprise版本。
2.1 WPA-PSK
为了堵塞WEP的漏洞而发展的加密技术,WPA-PSK为每个客户端分配唯一的秘钥而工作,但是仍然需要每个客户端使用密码以便登录系统。
下面简单介绍下WPA-PSK的认证方式
- 无线AP定期发送beacon数据包,使无线终端更新自己的无线网络列表
- 无线终端在每个信道1-13广播Probe Request
- 每个信道的AP回应,Probe Response,包含ESSID及RSN信息
- 无线终端给目标AP发送AUTH包。AUTH认证类型有两种,0为开放式,1为共享式(WPA/WPA2必须是共享式)
- AP回应AUTH包
- 无线终端给AP发送关联请求包association request
- AP给无线终端发送关联响应包association response
- EAPOL四次握手进行认证
- 完成认证后可以上网
四次握手协议如下
2.2 WPA-Enterprise
需要有另一台存储无线使用者账户数据的RADIUS(Remote Authentication Dial-In User Service)服务器,当客户端连接入AP时,AP会要求使用者输入账号密码,或是自动向客户端索取数字凭证,然后向RADIUS服务器确认使用者的身份。而用来加密无线封包的加密秘钥Key,也是在认证的过程中自动产生的,并且每一次联机说产生的秘钥(Session Key)都不同,因此非常难破解。
用用户名和密码登录网络后,每个客户端自动得到一个唯一的秘钥,秘钥很长并且每隔一段时间就会被更新,这样WIFI监听者就不能获取足够的数据包来解码秘钥。
一旦应用了WPA-Enterprise,不像WPA-PSK那样,客户端将不会知道密码。这样,外部的人就不能通过他们共享网络资源。WPA-Enterprise还可以节约你大量时间:你无需花费大量的时间去人工更新客户的密码。、
CCMP
Counter CBC-MAC Protocol,计数器模式密码块链消息完整码协议。CCMP主要是两个算法所组合而成的,分别是CTR model及CBC-MAC mode。CTR mode为加密算法,CBC-MAC则用于消息完整性运算。
|