【问题标题】:How to use “Native Wifi API” Windows API functions with ruby如何在 ruby​​ 中使用“Native Wifi API”Windows API 函数
【发布时间】:2015-06-19 03:28:38
【问题描述】:

我的设置:Windows 7、Ruby 1.9.3

我想管理无线网卡以访问不同的无线路由器,这是我尝试过的:

方法一:netsh wlan

通过netsh 命令工具管理 WLAN 适配器。

所以我在 Windows 中设置了我的无线网络并使用导出它

netsh wlan export profile name="wuhongliang" folder = "d:\" interface="Wireless" key=clear

这行得通,然后我可以添加配置文件并通过以下方式进行连接:

> netsh wlan add profile ^
filename="d:\wireless-wuhongliang.xml" ^
interface="wireless" Profile

wuhongliang is added on interface Wireless.

> netsh wlan connect name="wuhongliang" ^
ssid="wuhongliang"
Connection request was completed successfully.

这可以使用导出的配置文件将我连接到 WLAN。

所以查看 XML 配置文件:

<?xml version="1.0" ?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
  <name>wuhongliang</name>
  <SSIDConfig>
    <SSID>
      <hex>7775686F6E676C69616E67</hex>
      <name>wuhongliang</name>
    </SSID>
  </SSIDConfig>
  <connectionType>ESS</connectionType>
  <connectionMode>auto</connectionMode>
  <MSM>
    <security>
      <authEncryption>
        <authentication>WPA2PSK</authentication>
        <encryption>AES</encryption>
        <useOneX>false</useOneX>
      </authEncryption>
      <sharedKey>
        <keyType>passPhrase</keyType>
        <protected>true</protected>
        <keyMaterial>[Long Encrypted Key]</keyMaterial>
      </sharedKey>
    </security>
  </MSM>
</WLANProfile>

keyMaterial 显然是加密的网络密码。因此,如果我更改路由器密码,那么配置文件就会中断,因为我没有新的加密 keyMaterial

由于我不知道如何生成 keyMaterial,这对我不起作用。

方法二:使用wlanapi.dll

我找到了this article on codeproject.com,它看起来很有希望。但我没有 C#、C、C++ 方面的经验。

我尝试将dllRuby DLWin32API 一起使用,但我不知道如何设置参数或使用这些库。

这是我用来调用WlanEnumInterfaces API 的 Ruby 代码(但我很确定它不正确):

c_handle = 1
c_reserved = 0
c_interfacelist=" "*10000 
dllname = "wlanapi.dll" 
pro=Win32API.new(dllname, "WlanEnumInterfaces", ['p', 'l', 'p'], "v") 
p pro.call(handle, c_reserved, c_interfacelist) 
p c_interfacelist.unpack("l*")

【问题讨论】:

  • 请编辑问题,使其可读。您没有我们可以运行的 Javascript。
  • 对不起题主的格式问题,我花了大约3个小时来编辑题主的文字,我很难做到这一点,但我会慢慢修改,请不要不要删除我的问题,TKS
  • 非常感谢您为我编辑问题,虽然我不知道您是谁

标签: ruby windows winapi wifi wlanapi


【解决方案1】:

sharedKey 标记中将protected 值更改为falsekeyMaterial 值可以导入plaintext

<sharedKey>
    <keyType>passPhrase</keyType>
    <protected>false</protected>
    <keyMaterial>[The Password]</keyMaterial>
  </sharedKey>

key=clear 选项应该为您执行此操作,但显然不是。

【讨论】:

  • 非常感谢您的回答!它有效
    我真的很想学习如何使用 ruby​​ 调用 wlanapi.dll
    我将不得不调用其他一些 win32api,例如 user32,kernel32,所以,如果我掌握了如何使用 @987654331 @,我会知道如何做这些。你能帮帮我吗?
  • 这完全是另一个问题。一个必须处理如何在 Ruby 中使用 dlls 的问题。
猜你喜欢
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
  • 2016-10-31
  • 2023-03-22
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 2019-11-12
相关资源
最近更新 更多