WIFI 简单的连接及常用密码破解

WIFI所需权限及配置<uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><u

大家好,又见面了,我是你们的朋友全栈君。

WIFI所需权限及配置

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!--使wifi在息屏情况下不断wifi,有需要的话-->
    <uses-permission android:name="android.permission.WAKE_LOCK" />

开启WIFI

mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
mWifiManager.setWifiEnabled(true);//开启wifi

扫描周围WIFI

//Todo 没有mWifiManager.startScan()就可以直接getScanResults,我试过好像23版本以下就不行了,你的测试机型应该也要25以上吧
//23以下有适配问题,比如startScan之后并不能直接getScanResults(),这样得不到数据
List<ScanResult> mScanResultList = mWifiManager.getScanResults();

连接WIFI

核心连接WiFi代码(可以换不同的密码尝试)
String usePassword = "password"; 
int netId = mWifiManager.addNetwork(createWifiConfig(scanResult.SSID, usePassword, WIFICIPHER_WPA));
boolean enable = mWifiManager.enableNetwork(netId, true);
//ssid为wifi名,password为wifi密码,type为wifi连接使用的加密算法(一般为WPA)
private WifiConfiguration createWifiConfig(String ssid, String password, int type) {
        WifiConfiguration config = new WifiConfiguration();
        config.allowedAuthAlgorithms.clear();
        config.allowedGroupCiphers.clear();
        config.allowedKeyManagement.clear();
        config.allowedPairwiseCiphers.clear();
        config.allowedProtocols.clear();
        config.SSID = "\"" + ssid + "\"";

        WifiConfiguration tempConfig = isExist(ssid);
        if (tempConfig != null) {
            mWifiManager.removeNetwork(tempConfig.networkId);
        }

        if (type == WIFICIPHER_NOPASS) {
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        } else if (type == WIFICIPHER_WEP) {
            config.hiddenSSID = true;
            config.wepKeys[0] = "\"" + password + "\"";
            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            config.wepTxKeyIndex = 0;
        } else if (type == WIFICIPHER_WPA) {
            config.preSharedKey = "\"" + password + "\"";
            config.hiddenSSID = true;
            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            config.status = WifiConfiguration.Status.ENABLED;
        }

        return config;
    }

WIFIDome

wifi状态描述类 SupplicantState

ASSOCIATED

关联完成。

ASSOCIATING

开始关联到一个BSS或SSID。

COMPLETED

所有用户认证已完成。

DISCONNECTED

当前接入点不可关联,有可能开始下一个关联。

DORMANT

Android特有,当用户明确发出中断指令。

FOUR_WAY_HANDSHAKE

WPA 4次握手完成。

GROUP_HANDSHAKE

WPA group 握手完成。

INACTIVE

处于非活动状态(wpa_supplicant被禁用)。

INVALID

伪状态,通常不应被看到。

SCANNING

正在扫描网络。

UNINITIALIZED

还未连接到wpa_supplicant

wifi连接时如何知晓它连接的状态(如这个wifi密码错误)

 //这个广播在我手机并不能及时反应这个wifi为不能连接状态(手机可能屏蔽部分状态)
 //这个判断标准对于我的手机并不准
 private void registerBroadcastReceiver() {
        mBroadcastReceiver = new BroadcastReceiver() { 
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
                    int message = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);
                    switch (message) {
                        case WifiManager.WIFI_STATE_DISABLED:
                            //Toast.makeText(getApplicationContext(), "不可用", Toast.LENGTH_SHORT).show();
                            break;
                        case WifiManager.WIFI_STATE_DISABLING:
                            //Toast.makeText(getApplicationContext(), "正在关闭或者断开", Toast.LENGTH_SHORT).show();
                            break;
                        case WifiManager.WIFI_STATE_ENABLED:
                            //Toast.makeText(getApplicationContext(), "可用", Toast.LENGTH_SHORT).show();
                            break;
                        case WifiManager.WIFI_STATE_ENABLING:
                            //Toast.makeText(getApplicationContext(), "正在打开或者连接", Toast.LENGTH_SHORT).show();
                            break;
                        case WifiManager.WIFI_STATE_UNKNOWN:
                            //Toast.makeText(getApplicationContext(), "未知", Toast.LENGTH_SHORT).show();
                            break;
                        default:
                            break;
                    }
                } else if (intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
//                    WifiInfo wifiInfo = mWifiManager.getWifiInfo();
                    WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
                    SupplicantState state = wifiInfo.getSupplicantState();
                    String str = "";
                    if (state == SupplicantState.SCANNING) {
                        str = "正在扫描";
                    }
                    if (state == SupplicantState.ASSOCIATED) {
                        str = "关联AP成功";
                    } else if (state.toString().equals("AUTHENTICATING")) {
                        str = "正在验证";
                    } else if (state == SupplicantState.ASSOCIATING) {
                        str = "正在关联AP...";
                    } else if (state == SupplicantState.COMPLETED) {
                        str = "连接成功";
                    } else if (state == SupplicantState.INACTIVE) {

                    } else if (state.toString().equals("DISCONNECTED")) {//连接失败
                        str = "连接不成功";
                        Log.e(TAG, "mConnectCount: " + mConnectCount);
                        if (mConnectCount < 1)
                            mConnectCount++;
                        else {
                            is_password_error = true;
                            mConnectCount = 0;
//                            Toast.makeText(getApplicationContext(), "密码错误", Toast.LENGTH_SHORT).show();
                        }
                    }
                    //Toast.makeText(getApplicationContext(),str, Toast.LENGTH_SHORT).show();
                    Log.e(TAG, "连接状态: "+str );
                }
                int linkWifiResult = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 123);
                Log.e(TAG, "wifi_link_error" + linkWifiResult); //大多数返回123
                if (linkWifiResult == WifiManager.ERROR_AUTHENTICATING) {
                    is_password_error = true; //监听到连接wifi验证错误,改变flag,认为是密码错误
                }
            }
        };

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); //监听网络状态改变
        intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        registerReceiver(mBroadcastReceiver, intentFilter);
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129092.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MATLAB实现粒子群算法的进阶讲解(多维+约束条件)

    MATLAB实现粒子群算法的进阶讲解(多维+约束条件)我们在之前的博客中,对粒子群算法的实现进行了讲解,主要讲解了粒子群算法的产生,实现步骤,并且通过代码来实现了当输入变量为n维向量时的粒子群算法。许多网友对之前的代码有些疑惑,并且提到了几个问题:1,对于之前的代码,觉得有些看不懂?2,如果输入变量不再是n维向量,而是n*n维的矩阵,甚至n*n*n…维的矩阵,该如何编写代码?3,如果目标函数存在约束条件,该如何编写代码?本节就基于之前博客的内容,出现的问题,以及这两天我的一些学习,来对上述问题进行一个解答。

    2022年5月1日
    74
  • Java邮件发送详解

    Java邮件发送详解电子邮件要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。SMTP服务器地址:一般是smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。比如我们要使用QQ邮箱,就需要开…

    2022年5月15日
    33
  • GateWay网关 – 环境搭建v2「建议收藏」

    GateWay网关 – 环境搭建v2「建议收藏」目录基础使用Maven依赖application配置Gateway整合Nacos实现服务转发Maven依赖application配置自定义TokenFilter实现参数拦截gateWay高可用集群方式基础使用Maven依赖注意:不能引入spring-cloud-starter-web,会出现错误<parent>…

    2025年11月11日
    2
  • 数据泄露解决方案_gta5数据泄露做完了怎么办

    数据泄露解决方案_gta5数据泄露做完了怎么办项目配置不当引起的数据泄露问题,看冰河如何带你解决这类问题,强烈建议收藏!!

    2022年9月18日
    5
  • Java 如何抛出异常、自定义异常[通俗易懂]

    一、异常的抛出1、定义:一个方法不处理这个异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。2、throw:将产生的异常抛出(强调的是动作),抛出的既可以是异常的引用,也可以是异常对象。(位置:方法体内)3、throws:如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。用它修饰的方法向调用者表明该方法可能会抛出异

    2022年4月14日
    44
  • navicat激活2022【中文破解版】[通俗易懂]

    (navicat激活2022)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1TCF2R91JZ-eyJsaWNlb…

    2022年3月31日
    306

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号