【问题标题】:Change the password for a Wi-Fi profile更改 Wi-Fi 配置文件的密码
【发布时间】:2017-05-30 13:02:13
【问题描述】:

在我志愿服务的长期护理医院,每个月的第一天,访客 Wi-Fi 连接的密码都会更改。这给工作人员带来了很多工作量,也给患者带来了很多挫败感,其中许多人行动不便。

(是的,真正的解决方案是让 IT 团队保持相同的密码,但这不会发生)。

大多数患者通过 Windows 笔记本电脑与外界连接。我想创建一个批处理脚本,我们可以将它安装在他们的计算机上,它会自动检索下个月的密码并在需要时立即应用它。

我可以将下个月的访客密码放在医院内部网络上的一个文件中,该文件只能由当前拥有本月密码的人访问,我可以在批处理脚本中使用bitsadmin 来检索密码本地文件(见下文)。我可以在每个患者的计算机上设置一个任务,以便在月底之前运行这个脚本。

我的问题是:当上个月的密码在新月初失效时,如何通过批处理脚本更改该网络连接的密码?

我知道我可以使用...

netsh wlan show profile name=“INSERT_SSID_HERE” key=clear

... 找到当前密码,但是我该如何设置呢?


编辑:我有found,在 Windows Vista 及更高版本中,Wi-Fi 密码存储在C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces[Interface Guid].xml 的 XML 文件中。它以以下格式显示:

- <sharedKey>
    <keyType>passPhrase</keyType>
    <protected>true</protected>
    <keyMaterial> ** 400+ hexit number ** </keyMaterial>
  </sharedKey>

我猜要更改密码,我需要使用适当的算法加密新密码并更新此 XML 文件。有没有我可以用来自动执行此操作的命令?如果不是,我应该使用什么加密算法?

一个更简单的选择可能是删除加密:

    <protected>false</protected>
    <keyMaterial>plainTextPassword</keyMaterial>

但是,当我在重新启动计算机后尝试使用经过这种方式修改的 XML 文件重新启动 Wi-Fi 连接时,连接失败。


最好是不需要重启的解决方案。


获取密码的批处理脚本:

@echo off
setlocal
set file=%~dp0result.txt
bitsadmin /reset
bitsadmin /create /download job
bitsadmin /addfile job http://example.com/password.html %file%
bitsadmin /resume job

timeout 5

bitsadmin /getstate job | find /i "TRANSFERRED" && goto :done
bitsadmin /cancel job
exit /b 1

:done
bitsadmin /complete job
:: results.txt now holds the new password
exit /b 0

【问题讨论】:

  • 高安全医院这家!满足您当前所有安全问题的更简单的解决方案是将密码放在纸条上交给患者。
  • 那太好了。但他们中的许多人无法移动他们的手。对于他们中的一些人来说,他们的笔记本电脑(以及他们的眼球运动检测器和单开关扫描仪)是他们与外界的唯一联系。
  • 我有一个想法,“我可以将下个月的访客密码放在医院内部网络的文件中”,需要如何访问? UNC 路径、FTP 或类似的东西?
  • 只需要知道如何访问该文件,以便我可以相应地写一些东西
  • 我在问题中提供的批处理脚本允许我在最终用户计算机上的任何位置创建一个包含密码的results.txt 文件。您可以认为存在这样的文件,并且它位于您想要的任何位置。

标签: batch-file passwords wifi


【解决方案1】:

您是否尝试删除并重新添加配置文件,而不是仅将 XML 的内容更改为使用纯密码?

我过去也遇到过类似的情况,这对我有用:

此答案假定您只想在网络上保留 WiFi 密码而不是完整的 XML,并且 WiFi 的 SSID 是“My Network”。

  1. 断开网络连接:netsh wlan disconnect
  2. 将“我的网络”配置文件导出到其他位置,例如C:\: netsh wlan export profile folder="C:\" name="My Network" key=clear --> 这应该创建 C:\Wi-Fi-My Network.xml。生成的xml 文件应该与您在C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces 中看到的文件相似,但&lt;sharedKey&gt; 部分不受保护(这使我们在下一步只能进行一次替换)。显然,您也可以通过从Wlansvc 的配置文件目录中复制文件来执行此操作,但这样做需要知道接口的 GUID。导出更容易,因为您只需要知道您的 SSID。
  3. 在复制的配置文件中,确保protectedfalse,并用纯密码填写keyMaterial(简单的文本替换,用VB或C#应该很容易做到,但如果你需要做它纯粹是在批处理脚本中,请参阅Changing tag data in an XML file using windows batch file)
  4. 删除当前存储的配置文件:netsh wlan delete profile name="My Network"
  5. 添加回配置文件:netsh wlan add profile filename="C:\Wi-Fi-My Network.xml"
    (这将在 C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces 中重新创建适当的文件,并使用加密的密码。)
  6. 连接网络:netsh wlan connect name="My Network"

如果您可以存储完整的 XML,您还可以导出未加密的配置文件(步骤 2)并将其存储在您的网络驱动器中,然后您只需执行步骤 1、4、5 和 6。

我希望这会有所帮助。

【讨论】:

  • 您能解释一下命令C:\MyProfile.xml: netsh wlan export profile folder="C:\" name="My Network" key=clear 的作用吗?我假设C:\MyProfile.xml 应该替换为C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\{blablabla}\{profilename}.xml。当我这样做时,会打开一个 Internet Explorer 窗口,显示 XML 文件的内容。我以为我会看到文件的副本出现在 C:\ 的根目录中,但我没有看到这种情况发生。
  • "在复制的配置文件中,将 protected 更改为 false,并用纯密码填充 keyMaterial" >>> 我猜我需要使用正则表达式来完成这个从批处理脚本更改。很高兴看到处理所有这些步骤的完整批处理脚本。
  • 命令应该从netsh开始。忘记MyProfile.xml 的事吧,这是我个人笔记的剩余部分。我已经澄清了编辑中的步骤。我希望现在更清楚了吗?基本上,该步骤只是使用明文密钥复制您的 Wifi 配置文件 My Network 的当前配置文件。
  • 至于第二条评论:是的。请参阅此问题以获取示例:stackoverflow.com/questions/17054275/… 我只在工作中使用 Windows,因此目前无法编写和测试完整的批处理脚本。如果你不能让它工作,我会看看我是否可以在星期一创建一个。
【解决方案2】:

我通知密码的最佳逻辑方式是将密码保留为数字,并将 wifi 名称保留为 + 或 - 每个月“来自上一个密码” 通过这种方式,您可以一次通知患者下个月的密码是什么! :-) 例如:假设您当前的密码是 134768 你下个月的密码是 134778 然后在下个月初你可以将 wifi 重命名为 +10。

【讨论】:

    【解决方案3】:

    似乎“FooBar”询问了一个论坛如何加密/解密密钥材料,但从我得到的信息中不需要这样做,因为他提到 “我成功复制并粘贴了一个测试文件这些在计算机之间,并且连接得很好,所以加密绝对是可逆的。”所以我猜你所要做的就是:

    1. 在员工计算机上输入无线密码
    2. 检查xml文件是否更新(如果更新则下一步)
    3. 然后放到多台电脑可以到达的网络上
    4. C&P .xml 文件并覆盖
    5. 祈祷您不需要重新启动它,否则我猜您可以禁用互联网驱动程序并从批处理中重新启用它

    这是我的看法,但我目前无法真正测试它。

    【讨论】:

    • 加密是可逆的,但通常只有与加密数据的用户具有相同登录凭据的用户才能解密数据,这意味着实际上不可能只复制和粘贴 xml 文件如果 keyMaterial 仍然是加密的。 (keyMaterial 只是使用 CryptProtectData 加密,可以使用 CryptUnprotectData 解密;请参阅:msdn.microsoft.com/en-us/library/windows/desktop/… 使用 VB 或 C# 执行此操作相当简单,但对于批处理文件,我认为在这种情况下调用 netsh 可能是最简单的)跨度>
    • 嗯,另一种方法是nirsoft.net/utils/wireless_key.html 它有命令行可以导出到程序可以通过命令行导入的 .txt 文件。但这对我来说似乎是最后的手段。并且 CryptProtectData 是 C++,而只有一个批处理标签。
    • 是的,如果不是批处理限制,这整个事情就很简单了。 netsh 的好处是它是内置的,所以它只适用于批处理。
    • 这是非常正确的,但我的意思是你可以从网络上运行 wireless_key 程序,让它更容易,但是 netsh 是很重要的。批处理有很多限制,但很多人找到了巧妙的方法来处理它,而无需更改为 vbs、c、java 等。
    【解决方案4】:

    你也可以写一个批处理,利用

    netsh wlan set profileparameter name="SSID" keyMaterial="password"

    更新 XML 文档。 keyMaterial 参数可以通过来自另一个 .bat 或其他文件的变量集传入。

    当我当地的咖啡店决定每天更改密码并且我厌倦了告诉 Windows 10 忘记网络并重新连接时,我设计了这种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2020-02-14
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多