我正在编写一个小型网络管理工具.为了提取各种WiFi网络的详细信息,我正在调用wlanapi.dll, WlanGetProfile(...)API方法来获取每个可用WiFi网络的配置文件信息.
假设两个本地WiFi网络具有相似的SSID,那么当我向用户提供信息时,如何查询这两个网络上的信息并区分这两个网络?
我正在用C#编写我的应用程序,但是,如果他们能给我我需要的答案,可以提供非特定于代码的通用细节.但是,我将其标记为C#/ .Net,因为如果有办法使用本机.Net库获取此信息,我会欣赏C#代码示例.
我正在尝试使用CryptUnprotectData解密WEP配置文件的密钥.我获取配置文件密钥的方法是使用netsh导出配置文件.
netsh wlan export profile name="MyWEP" folder="./"
Run Code Online (Sandbox Code Playgroud)
现在,我手动将密钥材料从netsh命令生成的.xml文件复制到我的程序.顺便说一下,我正在解密的是 -
DATA_BLOB DataOut, DataVerify;
DataOut.cbData = encryptData.length();
DataOut.pbData = (BYTE*)("I_Manually_Copy_The_WEP_Key_Here");
if (CryptUnprotectData( &DataOut,
NULL,
NULL,
NULL,
NULL,
0,
&DataVerify))
{
printf("The decrypted data is: %s\n", DataVerify.pbData);
}
else
{
printf("Failed. Error Code: %d", GetLastError());
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误代码13引用无效数据.我究竟做错了什么 ?在Win 7及更高版本中,我可以直接使用WlanGetProfile和参数WLAN_PROFILE_GET_PLAINTEXT_KEY.但我在Vista上没有选择使用CryptUnprotectData函数.我在这里看过类似的帖子,但是没有得到太多有用的信息.此外,我使用相同的系统具有相同的用户登录凭据.有人可以建议我怎么办?
PS:我在Windows桌面SDK论坛上发布了相同的问题,但还没有得到回复.试试我的运气吧.
我正在尝试编写一个脚本,扫描所有可用的无线网络并连接到特定网络(SSID).有没有人为此已经编写了示例代码?由于某些限制,我无法安装第三方软件(托管的wifi api).
我试图在delphi上使用Windows API中的函数,Windows Wlanapi.dll(Native WIFI API)的函数
DWORD WINAPI WlanOpenHandle(
__in DWORD dwClientVersion,
__reserved PVOID pReserved,
__out PDWORD pdwNegotiatedVersion,
__out PHANDLE phClientHandle
);
Run Code Online (Sandbox Code Playgroud)
WlanHostedNetworkQueryProperty
DWORD WINAPI WlanHostedNetworkQueryProperty(
__in HANDLE hClientHandle,
__in WLAN_HOSTED_NETWORK_OPCODE OpCode,
__out PDWORD pdwDataSize,
__out PVOID *ppvData,
__out PWLAN_OPCODE_VALUE_TYPE *pWlanOpcodeValueType,
__reserved PVOID pvReserved
);
Run Code Online (Sandbox Code Playgroud)
我试图使用这些功能和其他人几个小时,阅读MSDN参考和其他网站,但我不能让这个工作.
我的尝试
type
TWlanOpenHandle = function( dwClientVersion:DWORD;
pReserved:Pointer;
pdwNegotiatedVersion:PDWORD;
phClientHandle:PHANDLE
):DWORD; stdcall;
function apiWlanOpenHandle( dwClientVersion:DWORD;
pReserved:Pointer;
pdwNegotiatedVersion:PDWORD;
phClientHandle:PHANDLE
):DWORD;
implementation
function apiWlanOpenHandle ( dwClientVersion:DWORD; pReserved:Pointer; pdwNegotiatedVersion:PDWORD; phClientHandle:PHANDLE ):DWORD;
var
WlanOpenHandle: TWlanOpenHandle;
DLL: Cardinal;
begin
DLL:=LoadLibrary('Wlanapi.dll'); …Run Code Online (Sandbox Code Playgroud) 我使用的是 Windows 8.1,它没有工具(带有 GUI)来管理 wifi 网络配置文件。所以我正在写一篇对我有帮助的文章。我做了一些谷歌搜索并找到了Managed Wifi API,在教程的帮助下,我设法将这段代码放在一起:
foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
{
foreach (Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles())
{
string profileName = profileInfo.profileName;
ListViewItem item = new ListViewItem(profileName);
string profileXML = wlanIface.GetProfileXml(profileInfo.profileName);
XmlDocument doc = new XmlDocument();
doc.LoadXml(profileXML);
var NSManager = new XmlNamespaceManager(doc.NameTable);
NSManager.AddNamespace("d", "http://www.microsoft.com/networking/WLAN/profile/v1");
XmlNode node = doc.DocumentElement.SelectSingleNode("//d:WLANProfile/d:MSM/d:security/d:authEncryption/d:authentication", NSManager);
item.SubItems.Add(node.InnerText);
Profiles.Items.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
获取保存的网络配置文件列表并将它们打印在 ListView 上。我有两个问题。一是如何使用 Managed Wifi API 获取完整的个人资料信息?因为我唯一能得到的就是个人资料名称。网站上没有文档。
第二个问题是,由于无法使用API 获取完整的网络信息,因此我使用API以XML格式打印配置文件信息,然后解析XML并读取它。一个示例 XML:
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>MEDO PUB</name>
<SSIDConfig>
<SSID>
<hex>4D45444F20505542</hex>
<name>MEDO PUB</name>
</SSID>
</SSIDConfig> …Run Code Online (Sandbox Code Playgroud)