Моя установка: Windows 7, Ruby 1.9.3
Я хочу управлять беспроводным сетевым адаптером для доступа к различным беспроводным маршрутизаторам, вот что я пробовал:
Способ 1: netsh wlan
Управление адаптером WLAN с помощью командных инструментов netsh
.
Поэтому я настроил свою беспроводную сеть в 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
, у меня это не сработает.
Способ 2: использование wlanapi.dll
Я нашел эту статью. на codeproject.com, и это выглядело многообещающе. Но у меня нет опыта в C#, C, C++.
Я пытался использовать dll
с Ruby DL
и Win32API
, но я не знаю, как установить параметры или использовать эти библиотеки в целом.
Это код Ruby, который я использовал для вызова WlanEnumInterfaces
API (но я почти уверен, что он неверен):
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*")