【发布时间】: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++ 方面的经验。
我尝试将dll 与Ruby DL 和Win32API 一起使用,但我不知道如何设置参数或使用这些库。
这是我用来调用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