获取wifi的加密方式

由于有需求是搜索附近的网络,通过账号和密码连接wifi,但是连接的时候需要知道连接的wifi加密方式

这篇博客 也是我写的,由于忘记账号和密码了,所以换了账号,重新整理了一下
原文地址:

android获取当前隐藏和未隐藏wifi的加密方式(安全性)

1.一般WIFI加密有几种方式

  • WPA-PSK/WPA2-PSK(目前最安全家用加密)
  • WPA/WPA2(较不安全)
  • WEP(安全较差)
  • AP(迄今最安全的)

2.获取WiFi加密方式一(不推荐) 

 public void getCipherType(Context context, String ssid) {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

        List<ScanResult> list = wifiManager.getScanResults();

        for (ScanResult scResult : list) {

            if (!TextUtils.isEmpty(scResult.SSID) && scResult.SSID.equals(ssid)) {
                String capabilities = scResult.capabilities;
                Log.i("river","capabilities=" + capabilities);

                if (!TextUtils.isEmpty(capabilities)) {

                    if (capabilities.contains("WPA") || capabilities.contains("wpa")) {
                        Log.i("river", "wpa");

                    } else if (capabilities.contains("WEP") || capabilities.contains("wep")) {
                        Log.i("river", "wep");
                    } else {
                        Log.i("river", "no");
                    }
                }
            }
        }
    }

注意:此方法获取不到隐藏的网络加密方式

3.获取WiFi加密方式二(推荐)

于是查看系统设置源码中查看,系统是如何获取到隐藏网络的加密方式

    /** 
     * These values are matched in string arrays -- changes must be kept in sync 
     */  
    static final int SECURITY_NONE = 0;  
    static final int SECURITY_WEP = 1;  
    static final int SECURITY_PSK = 2;  
    static final int SECURITY_EAP = 3;  

    static int getSecurity(WifiConfiguration config) {  
        if (config.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {  
            return SECURITY_PSK;  
        }  
        if (config.allowedKeyManagement.get(KeyMgmt.WPA_EAP) || config.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {  
            return SECURITY_EAP;  
        }  
        return (config.wepKeys[0] != null) ? SECURITY_WEP : SECURITY_NONE;  
    }  

测试代码:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WifiManager mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = mWifiManager.getConnectionInfo();


        // 得到配置好的网络连接
        List<WifiConfiguration> wifiConfigList = mWifiManager.getConfiguredNetworks();

        for (WifiConfiguration wifiConfiguration : wifiConfigList) {
            //配置过的SSID
            String configSSid = wifiConfiguration.SSID;
            configSSid = configSSid.replace("\"", "");

            //当前连接SSID
            String currentSSid =info.getSSID();
            currentSSid = currentSSid.replace("\"", "");

            //比较networkId,防止配置网络保存相同的SSID
            if (currentSSid.equals(configSSid)&&info.getNetworkId()==wifiConfiguration.networkId) {
                Log.e("river", "当前网络安全性:" + getSecurity(wifiConfiguration));
            }
        }
    }

    /**
     * These values are matched in string arrays -- changes must be kept in sync
     */
    static final int SECURITY_NONE = 0;
    static final int SECURITY_WEP = 1;
    static final int SECURITY_PSK = 2;
    static final int SECURITY_EAP = 3;

    static int getSecurity(WifiConfiguration config) {
        if (config.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
            return SECURITY_PSK;
        }
        if (config.allowedKeyManagement.get(KeyMgmt.WPA_EAP) || config.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
            return SECURITY_EAP;
        }
        return (config.wepKeys[0] != null) ? SECURITY_WEP : SECURITY_NONE;
    }


————————————————
版权声明:本文为CSDN博主「AndroidDaily」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fenggit/article/details/47187227

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是获取WiFi加密类型的Java代码示例: ``` import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; public class WifiUtils { private WifiManager wifiManager; public WifiUtils(WifiManager wifiManager) { this.wifiManager = wifiManager; } // 获取WiFi加密类型 public String getWifiEncryptionType(ScanResult scanResult) { String encryptionType = ""; // 获取WiFi的安全类型 String capabilities = scanResult.capabilities; if (capabilities.contains("WPA") || capabilities.contains("WPA2")) { encryptionType = "WPA/WPA2"; } else if (capabilities.contains("WEP")) { encryptionType = "WEP"; } else { encryptionType = "无密码"; } return encryptionType; } // 连接WiFi public boolean connectWifi(String ssid, String password, String encryptionType) { // 配置WiFi信息 WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "\"" + ssid + "\""; if (encryptionType.equals("WPA/WPA2")) { wifiConfig.preSharedKey = "\"" + password + "\""; wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); } else if (encryptionType.equals("WEP")) { wifiConfig.wepKeys[0] = "\"" + password + "\""; wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); } else { wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); } // 连接WiFi int networkId = wifiManager.addNetwork(wifiConfig); boolean isConnected = wifiManager.enableNetwork(networkId, true); return isConnected; } } ``` 使用示例: ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiUtils wifiUtils = new WifiUtils(wifiManager); // 扫描WiFi列表 List<ScanResult> scanResults = wifiManager.getScanResults(); for (ScanResult scanResult : scanResults) { String ssid = scanResult.SSID; String encryptionType = wifiUtils.getWifiEncryptionType(scanResult); // 连接WiFi boolean isConnected = wifiUtils.connectWifi(ssid, "password", encryptionType); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值