前言如果想要对针对WiFi的攻击进行监测 , 就需要定期获取WiFi的运行状态 , 例如WiFi的SSID , WiFi强度 , 是否开放 , 加密方式等信息 , 在Android中通过WiFiManager来实现
WiFiManager简介WiFiManager这个类是Android暴露给开发者使用的一个系统服务管理类 , 其中包含对WiFi响应的操作函数;其隐藏掉的系统服务类为IWifiService , 这个类是google私有的 , 属于系统安全级别的API类我们需要通过WifiManager进行函数操作完成UI , 监听对应的广播消息 , 从而实现获取WiFi信息的功能
内置方法方法含义addNetwork(WifiConfiguration config)通过获取到的网络的链接状态信息 , 来加入网络calculateSignalLevel(int rssi , int numLevels)计算信号的等级compareSignalLevel(int rssiA, int rssiB)对照连接A 和连接BcreateWifiLock(int lockType, String tag)创建一个wifi 锁 , 锁定当前的wifi 连接disableNetwork(int netId)让一个网络连接失效disconnect()断开连接enableNetwork(int netId, Boolean disableOthers)连接一个连接getConfiguredNetworks()获取网络连接的状态getConnectionInfo()获取当前连接的信息getDhcpInfo()获取DHCP 的信息getScanResulats()获取扫描測试的结果getWifiState()获取一个wifi 接入点是否有效isWifiEnabled()推断一个wifi 连接是否有效pingSupplicant()ping 一个连接 。推断能否连通ressociate()即便连接没有准备好 , 也要连通reconnect()假设连接准备好了 , 连通removeNetwork()移除某一个网络saveConfiguration()保留一个配置信息setWifiEnabled()让一个连接有效startScan()开始扫描updateNetwork(WifiConfiguration config)更新一个网络连接的信息其他常用基类ScanResult通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息
字段含义BSSID接入点的地址 , 这里主要是指小范围几个无线设备相连接所获取的地址 , 比如说两台笔记本通过无线网卡进行连接 , 双方的无线网卡分配的地址SSID网络的名字 , 当我们搜索一个网络时 , 就是靠这个来区分每个不同的网络接入点Capabilities网络接入的性能 , 这里主要是来判断网络的加密方式等Frequency频率 , 每一个频道交互的MHz 数Level等级 , 主要来判断网络连接的优先数 。WifiInfoWiFi连接成功后 , 可通过WifiInfo类获取WiFi的一些具体信息
方法含义getBSSID()获取BSSIDgetDetailedStateOf()获取client的连通性getHiddenSSID()获得SSID 是否被隐藏getIpAddress()获取IP 地址getLinkSpeed()获得连接的速度getMacAddress()获得Mac 地址getRssi()获得802.11n 网络的信号getSSID()获得SSIDgetSupplicanState() 返回详细client状态的信息wifiConfigurationWiFi的配置信息
类名含义WifiConfiguration.AuthAlgorthm用来判断加密方法WifiConfiguration.GroupCipher获取使用GroupCipher 的方法来进行加密WifiConfiguration.KeyMgmt获取使用KeyMgmt 进行WifiConfiguration.PairwiseCipher获取使用WPA 方式的加密WifiConfiguration.Protocol获取使用哪一种协议进行加密wifiConfiguration.Status获取当前网络的状态权限app AndroidManifest.xml
申请权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
Android 6.0版本中如果未开启GPS是无法获取到扫描列表的 , 需要动态申请ACCESS_COARSE_LOCATION
// 检测项目是否被赋予定位权限public void checkPermissions(Context context){if(ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){//未开启定位权限//开启定位权限,200是标识码ActivityCompat.requestPermissions((Activity) context,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},200);}}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 随身wifi怎么用的要自己买卡么(随身wifi靠谱吗)
- 随身WiFi是什么意思,怎么用的(随身wifi有什么意义)
- 随身WiFi怎么用(随身wifi怎么交费)
- 随身WiFI是怎么用的(随身wifi激活的步骤)
- 移动随身wifi怎么用(移动wifi多少钱一个月)
- 随身无线网怎么用(随身wifi是不是智商税)
- android安卓手机:[4]如何怎么打开.apk文件
- 29 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-终篇
- 通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端
- Android自动化测试工具调研