如何在 Android 中连接到加密算法未知的 WiFi 网络?

2024-01-06

我研究过这个问题堆栈溢出,但所有答案都指定了如何使用已知加密算法(主要是 WEP)连接到网络。在我的应用程序中,我检索可用 wifi 网络的列表,并将它们显示在ListView (using WifiManager)。当用户单击列表中的一项时,我想连接到网络。

我当前的实现尝试获得WifiConfiguration数据来自ScanResult的功能字符串。例如,这些都是检索到的实际功能字符串:

[WPA2-PSK-CCMP][ESS]
[WPA2-PSK-CCMP+TKIP][ESS]
[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]

根据一些研究,我假设这些是括号分隔的功能,并且每一项的第一项都是-分隔的字符串显示:

[Authentication Algorithm - Key Management Algorithm - Pairwise Cipher]

我解析这些数据,然后创建一个WifiConfiguration对象,然后尝试连接到它,但总是失败(addNetwork回报-1)。我究竟做错了什么?这是我的代码:

@Override
public void onItemClick(AdapterView<?> adapter, View parent, int position, long id) {
    ScanResult result = (ScanResult) adapter.getItem(position);
    WifiConfiguration config = new WifiConfiguration();

    String currentNetwork = mWifiManager.getConnectionInfo().getSSID();
    if (currentNetwork != null && currentNetwork.equals(result.SSID))
    {
        Toast.makeText(this, "Already connected", Toast.LENGTH_SHORT).show();
        return;
    }

    config.BSSID = result.BSSID;
    config.SSID = result.SSID;
    String firstCapabilities = result.capabilities.substring(1, result.capabilities.indexOf("]")-1);
    String[] capabilities = firstCapabilities.split("-");
    String auth = capabilities[0];
    String keyMgmt = capabilities[1];
    String pairwiseCipher = capabilities[2];

    int a = 0;
    if (auth.contains("EAP"))
        a |= WifiConfiguration.AuthAlgorithm.LEAP;
    else if (auth.contains("WPA"))
        a |= WifiConfiguration.AuthAlgorithm.OPEN;
    else if (auth.contains("WEP"))
        a |= WifiConfiguration.AuthAlgorithm.SHARED;
    config.allowedAuthAlgorithms.set(a);

    int k = WifiConfiguration.KeyMgmt.NONE;
    if (keyMgmt.contains("IEEE802.1X"))
        k |= WifiConfiguration.KeyMgmt.IEEE8021X;
    else if (auth.contains("WPA") && keyMgmt.contains("EAP"))
        k |= WifiConfiguration.KeyMgmt.WPA_EAP;
    else if (auth.contains("WPA") && keyMgmt.contains("PSK"))
        k |= WifiConfiguration.KeyMgmt.WPA_PSK;
    config.allowedKeyManagement.set(k);

    int c = WifiConfiguration.PairwiseCipher.NONE;
    if (pairwiseCipher.contains("CCMP"))
        c |= WifiConfiguration.PairwiseCipher.CCMP;
    if (pairwiseCipher.contains("TKIP"))
        c |= WifiConfiguration.PairwiseCipher.TKIP;
    config.allowedPairwiseCiphers.set(c);

    int networkId = mWifiManager.addNetwork(config);
    if (networkId == -1)
    {
        //always hits this line!
        Toast.makeText(this, "Failed to create network configuration", Toast.LENGTH_SHORT).show();
    }
    else
    {
        //Never reaches here!
        mWifiManager.disconnect();
        mWifiManager.enableNetwork(networkId, true);
        mWifiManager.reconnect();
    }

}

对于 WPA*,如果您未将 preSharedKey 设置为 8 个或更多字符,则会失败并返回 -1。我根本没看到你设置它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 中连接到加密算法未知的 WiFi 网络? 的相关文章

  • java.lang.IllegalArgumentException:此组件要求您指定有效的 android:textAppearance 属性

    我的布局文件之一中有一个 com google android material button MaterialButton 组件 当我使用最新版本的 Material Components 库 com google android mat
  • 在 Android 上通话结束时启动活动

    我想在通话结束时启动一项活动 找不到任何对此的参考 我该怎么做 我还没有尝试过这个 但我假设你可以运行一些服务 始终在后台运行 它利用电话状态监听器 http developer android com reference android
  • android edittext中的字符映射

    我想让我的编辑文本就像我写字符 g 时一样 它是相关的映射自定义字符应该写成印地语中的 我认为应该有字符映射 但没有知识任何人都可以帮助我 怎么做 其他应用程序https play google com store apps details
  • Android短音的正确播放方法?

    我正在创建一个应用程序 屏幕上将有多个图像 这些图像将是按钮 点击时会播放短促的声音 我对此进行了研究 只能找到我当前用来播放声音的方法 这似乎根本没有响应 我希望声音能够快速播放并且能够响应多次快速点击 我不确定这在 Android 中是
  • 如何正确释放Android MediaPlayer

    我正在尝试向我的 Android 应用程序添加一个按钮 当点击该按钮时它会播放 MP3 我已经让它工作了 但没有办法释放 mediaPlayer 对象 因此即使在我离开活动后它仍然会继续播放 如果我在react 方法之外初始化MediaPl
  • 按下按钮时应用不同的样式

    有没有办法在按下按钮时将样式应用于按钮 如果我有一种风格样式 xml
  • fetchUuidsWithSdp 的奇怪 UUID 逆转

    我有一个在树莓派上运行的 python 蓝牙服务器 使用 PyBluez 我在服务器中使用的uuid是 8f86d132 4ab8 4c15 b8df 0b70cf10ea56 我正在打电话device fetchUuidsWithSdp
  • 如何在 Linux 内核中定义并触发我自己的新软中断?

    我想在 Linux 内核中创建自己的软中断 这是正确的方法吗 In the init我想触发该模块的softirq我将添加一个调用 394 void open softirq int nr void action struct softir
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • 自定义首选项中的android首选项水平分隔线?

    我创建了自己的自定义首选项对象来扩展首选项 我创建它们只是因为这些自定义数据类型没有首选项 一切正常 但我的自定义首选项没有相同的外观 因为它们缺少系统首选项对象具有的水平分隔线 我已经查找了创建水平分隔线的代码 但我找不到它是在哪里完成的
  • Bitmap.getPixels() 中的 IllegalArgumentException

    我想将数据从位图复制到int using getPixels 这是我当前的代码 int pixels new int myBitmap getHeight myBitmap getWidth myBitmap getPixels pixel
  • 在 Cordova 应用程序中获取额外功能

    我们有两个 Android 应用程序 一个使用本机 Java 实现 另一个使用 Ionic 编写 Ionic 应用程序启动我的应用程序 这是使用灯插件 https github com lampaa com lampa startapp 我
  • Android Eclipse 上的 Web 服务

    我是 android eclipse java 的新手 事实上这个论坛也是如此 有人遇到过这种情况吗 从用户那里获取输入并通过使用 android eclipse 中的 Web 服务来显示适当的结果 有可用的示例吗 非常感谢 我正在发布教程
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 通过系统应用程序以编程方式静默安装 apk(无需 root)

    我有带有 android sharedUserId android uid system UID 1000 的系统级应用程序 设备未root INSTALL PACKAGES 权限包含在清单中 我可以静默安装下载的 apk 吗 我已经发现这
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne

随机推荐

  • 在音频设备连接/断开时自动收到通知?

    每当用户连接或断开音频设备时是否可以自动收到通知 在 Vista 中 您可以使用 Core AudioIMMNotificationClient 接口 http msdn microsoft com en us library window
  • Sidekiq - 无法在 5.000 秒内获得数据库连接

    我在 os x 上开发 Rails 4 和 Sidekiq 时收到以下警告 10 13 39 worker 1 2014 09 22T07 13 39 857Z 86981 TID oug0oog10 WARN could not obta
  • 如何在OpenCart中设置配置?

    警告 require once sgweb1 minufashion system startup php function require once 无法打开流 没有这样的文件或 目录在 D inetpub vhosts sgwebgen
  • 从可访问性的角度来看,我应该更喜欢

    这个问题在这里已经有答案了 通常 在书籍 教程和一些实际网页中 我看到导航栏标记为 li a 中的 s 元素 ul 中的元素 ul li
  • 类型错误:无法连接“str”和“type”对象

    在解决我的问题之前 我已经四处寻找答案 但似乎找不到任何针对我的情况的信息 好的 基本上我通过 cmd 调用我的脚本并传入 16 个参数并使用它们来设置我拥有的一些变量 我正在创建一个自定义 html 报告供我们公司使用 我只是用这些变量来
  • pandas.read_excel() 输出“OverflowError:日期值超出范围”,而不存在日期列

    我正在尝试将一个大的 Excel 文件 400k x 40 导入到 Pandas DataFrame 中 虽然它在我的本地计算机上运行良好 但在移植到 Python 3 7 Pandas 1 2 4 和 Openpyxl 3 0 7 的 L
  • 如何在配置文件中隐藏数据库密码

    我正在开发一个 C 项目 该项目需要访问数据库以读取其输入 到目前为止 我们使用了默认用户名 postgres 和存储在基于 xml 的配置文件中的 固定明文 密码以及许多其他设置 现在我需要的是在提供配置文件时向用户隐藏密码 FYI 开发
  • gulp 构建语义用户界面非常慢

    我已经为此搜索了好几天 但运气不佳 我通过 NPM 通过 Laravel 安装安装了 Semantic UI 我修改了项目根目录中的 gulpfile js 以导入语义 UI 的构建和监视任务 var elixir require lara
  • 媒体会话兼容未在 Pre-Lollipop 上显示锁屏控件

    我在用着MediaSessionCompat来自 AppCompat 支持库修订版 22 在 Lollipop 上 我收到通知 而且锁屏的背景是专辑封面 一切都很顺利 在棒棒糖之前的设备上 锁屏上的音乐控件根本不显示 这很奇怪 我尝试了一切
  • AngularJS:使用多行写入和读取文本区域

    我不敢相信为什么我找不到这个主题的任何内容 我得到了一个表格 其中包含姓氏 输入 名字 输入 描述 文本区域 因为我想提供几行 让我们从创建一个新对象开始 好的 你输入类似的内容 姓 fox 名 peter 描述 what can I sa
  • fread():从文件读取(不对齐)会导致跳过字节

    我有一个文件 使用 C 我想使用 fread 来自 stdio h 读取它的内容并将其写入结构的成员中 在我的例子中 开头有一个 2 字节 int 后面跟着一个 4 字节 int 但是 在将文件内容正确写入结构的前两个字节变量后 它会跳过两
  • 是否可以将 Asterisk 作为支持 WebRTC 的移动应用程序的信令服务器

    是否可以将 Asterisk 作为支持 WebRTC 的移动应用程序的信令服务器 我发现我需要在node js 中创建信令服务器 我想知道 Asterisk 是否可以为我完成这项工作 此外 WebRTC 媒体是否通过信令服务器传递 或者 是
  • 在 GitLab CI 管道中使用 docker-compose

    我正在尝试使用以下内容实现 GitLab 持续集成 CI 管道 gitlab ci yml file image docker latest When using dind it s wise to use the overlayfs dr
  • Matlab 相当于 Python 的“None”

    Matlab中是否有一个关键字大致相当于None在Python中 我试图用它来标记函数的可选参数 我正在翻译以下Python代码 def f x y None if y None return g x else return h x y 进
  • Winrt StreamWriter 和 StorageFile 未完全覆盖文件

    在这里快速搜索一无所获 因此 我开始使用一些相当迂回的方法在我的 WinRT 应用程序中使用 StreamWriter 阅读效果很好 写作则不同 我看到的是 当我选择要写入的文件时 如果我选择一个新文件 那么就没有问题 该文件已按我的预期创
  • 如何在Android上创建简单的日历[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何通过 Typescript 使用全局 Node 包

    可以通过安装全局包来使用它们npm install g 如果以这种方式安装 Typescript 类型 它们也可以在全局文件夹中使用 例如 usr lib node modules在Linux系统上 当使用以下命令转译打字稿源文件时tsc
  • Spring Data JPA底层机制无实现

    我开始阅读本教程 春季启动教程 https spring io guides tutorials bookmarks 在此我读到 在模型模块下 他们实现了 POJO 和存储库接口 gt github上的教程 https github com
  • 如何使用JNI代码正确导入Android库?

    背景 我制作了一个使用 JNI 进行位图处理的小型 SDK 链接here https github com AndroidDeveloperLB AndroidJniBitmapOperations 它只有 2 个项目 一个示例项目 演示
  • 如何在 Android 中连接到加密算法未知的 WiFi 网络?

    我研究过这个问题堆栈溢出 但所有答案都指定了如何使用已知加密算法 主要是 WEP 连接到网络 在我的应用程序中 我检索可用 wifi 网络的列表 并将它们显示在ListView using WifiManager 当用户单击列表中的一项时