微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以编程方式检测来自Windows 2003服务器的无线networking设备的密码types和encryption级别

现在我的团队在使用Windows应用程序c#的networking项目中工作。 我不知道如何以编程方式检测来自Windows 2003服务器无线networking设备的密码types和encryption级别

search后,我得到了WMI(Windows Management Instrumentation)来解决这个问题

请build议从Windows 2003服务器的无线networking设备查找密码types和encryption级别的示例/参考

从Windows通过entity framework连接到Informix的问题

在选项卡中打开.NET插件

禁用“Foo遇到问题,需要closures”窗口

如何有效地检查,如果一个path是C#中的另一个path的孩子?

在C#中获取Windows Serverclosures原因

如何查看exe的SmartScreen声誉得分?

一个mac的.net软件

检测HWND可见性更改

Windows 7的NLSsorting更改

使用installutil从具有多个服务的可执行文件安装单个服务

刚发现你的问题。 您搜索的信息来源于Ndis驱动程序。 WMI只给你这些信息的一个子集。 每个Ndis驱动程序都支持一些标准的请求,这些请求可以通过DeviceIoControl函数发送(参见http://msdn.microsoft.com/en-us/library/aa363216%28v=VS.85%29.aspx )。 作为一个输入(lpInBuffer参数),你应该给一个DWORD OID代码一个控制代码来标识请求,作为一个输出,你会收到一个信息结构,或者你的情况一个DWORD(枚举值)。 例如,如果你问Ndis驱动程序

#define OID_802_11_WEP_STATUS 0x0D01011B

(作为lpInBuffer参数的DWORD值),也返回带有类似信息的DWORD

// Also aliased typedef to new name typedef enum _Ndis_802_11_WEP_STATUS { Ndis802_11WEPEnabled,Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,Ndis802_11WEPdisabled,Ndis802_11Encryptiondisabled = Ndis802_11WEPdisabled,Ndis802_11WEPKeyAbsent,Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,Ndis802_11WEPNotSupported,Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,Ndis802_11Encryption2Enabled,Ndis802_11Encryption2KeyAbsent,Ndis802_11Encryption3Enabled,Ndis802_11Encryption3KeyAbsent } Ndis_802_11_WEP_STATUS,*PNdis_802_11_WEP_STATUS,Ndis_802_11_ENCRYPTION_STATUS,*PNdis_802_11_ENCRYPTION_STATUS;

要求

#define OID_802_11_AUTHENTICATION_MODE 0x0D010118

回报

typedef enum _Ndis_802_11_AUTHENTICATION_MODE { Ndis802_11AuthModeOpen,Ndis802_11AuthModeShared,Ndis802_11AuthModeAutoSwitch,Ndis802_11AuthModeWPA,Ndis802_11AuthModeWPAPSK,Ndis802_11AuthModeWPANone,Ndis802_11AuthModeWPA2,Ndis802_11AuthModeWPA2PSK,Ndis802_11AuthModeMax // Not a real mode,defined as upper bound } Ndis_802_11_AUTHENTICATION_MODE;

要求

#define OID_802_11_INFRASTRUCTURE_MODE 0x0D010108

回报

typedef enum _Ndis_802_11_NETWORK_INFRASTRUCTURE { Ndis802_11IBSS,Ndis802_11Infrastructure,Ndis802_11AutoUnkNown,Ndis802_11InfrastructureMax // Not a real value,defined as upper bound } Ndis_802_11_NETWORK_INFRASTRUCTURE;

等等。 在安装Windows DDK之后,您可以在ntddndis.h找到所需的所有不同的常量。

要打开设备句柄,您应该使用CreateFile函数。 而不是文件名称,你应该给一个字符串前缀"\."和适配器名称(适配器GUID)。 适配器名称可以用不同的方式枚举。 其中最简单的是注册表项HKEY_LOCAL_MACHInesYstemCurrentControlSetservicesTcpipParametersAdapters的子项名称

所有我上面解释的工作完全像http://msdn.microsoft.com/en-us/library/aa964902%28v=VS.85%29.aspx或其他使用DeviceIoControl例子。 在DDK中描述了必须支持一些设备类的IoControl请求的完整列表。 我再重复一遍,那个使用这个只需要使用DeviceIoControl而不是写一个设备驱动程序。

更多的是10年前,我在这里描述了这样的要求。 我现在测试了我的旧程序,没有任何问题。 一个只需要使用你需要的OID,而不是更多。

更新:我发现了一个很好的链接http://pages.infinit.net/codeguru/WiFiArticle.htm这就是说,就像我刚才写的一样。 在我看来,在CreateFile使用这里错误的参数。 一个必须使用FILE_SHARE_READ | FILE_SHARE_WRITE FILE_SHARE_READ | FILE_SHARE_WRITE使所有工作。 示例http://code.google.com/p/haggle/source/browse/winmobile/Haggle/WindowsWiFiUtils.cpp (请参阅bool WindowsWiFiUtils:init() , bool WindowsWiFiUtils::setEncryptionMode(unsigned long adapterIndex,const unsigned int mode)等等)看起来好多了,包含很多方法,也可以为你感兴趣。 这是一个C ++的例子,但是用C#重写这个很容易。

更新2:另一种方法是使用“本地Wifi API” http://msdn.microsoft.com/en-us/library/ms706556%28VS.85%29.aspx像WlanQueryInterface(例如与wlan_intf_opcode_supported_infrastructure_auth_cipher_pairs)或WZCQueryInterface,但它似乎不支持Windows server 2003,你需要什么。 通常“本地Wifi API”可能是提供最大信息(或修改它)的更可靠的方式,但WMI也可能是一个很好的实用选择。

就WMI而言,您可以检索的无线连接信息相当有限。

运行WMI查询"Select * from MSNdis_80211_WEPStatus where active=true"应该给你一个数字结果,其中:

0=WEP is in use 2=Connection is unsecured 4=WPA-PSK is in use 6=WPA is in use 7=disconnected

要从powershell运行这个查询,你可以简单地做:

PS C: WINDOWS> gwmi -query "Select * from MSNdis_80211_WEPStatus where active=true" -namespace rootwmi

从C#下面应该工作:

using System; using System.Management; class Query_SelectQuery { public static int Main(string[] args) { SelectQuery selectQuery = new SelectQuery("Select * from MSNdis_80211_WEPStatus where active=true"); ManagementObjectSearcher searcher = new ManagementObjectSearcher("rootwmi",selectQuery); foreach (ManagementObject resultVal in searcher.Get()) { Console.WriteLine(resultVal.ToString()); } Console.ReadLine(); return 0; } }

如果您有多个活动的无线连接,则会变得更加困难,因为您必须通过查询MSNdis_80211_ServiceSetIdentifier类中的Ndis80211Ssid属性获取SSID值。

如果你使用的是Windows {Vista,7,server 2008},你可以从命令行运行netsh wlan export ,然后用你的网络设置(不包括无线密钥)输出一个很好的.xml文件,但是我不认为有什么办法可以在Windows XP,server 2003或其他未列出的操作系统上运行。

如果您需要Windows 2003 server下的更多详细配置信息,另一个选项是访问本文详述的组策略设置: http : //technet.microsoft.com/en-us/library/bb878079.aspx

我没有Windows server 2003计算机可以方便地进行测试,但是您应该能够通过WMI在根 RSoP命名空间下访问这些组策略对象和设置

从控制台运行wbemtest或使用Microsoft WMI Code Creator工具可以让您查看可用的WMI对象和类,以确定组策略对象所在的位置。

查询组策略WMI对象看起来有点痛苦,虽然:(

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐