65.9K
CodeProject 正在变化。 阅读更多。
Home

构建简单的网络浏览器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.49/5 (23投票s)

2007年1月9日

1分钟阅读

viewsIcon

93609

构建简单的网络浏览器以枚举本地网络上的计算机和用户。

引言

在开发用于移动设备的 SQL Server 管理工具 - Siccolo时,我创建了一个简单的程序,能够在域内的本地网络上浏览计算机并检索其他信息(例如,用户列表、服务)。
更多信息请参见 Siccolo 的文章!

提供的代码允许构建简单的网络浏览器

使用代码

.NET 允许通过使用 WMI(Windows Management Instrumentation)服务,借助 ManagementObjectSearcher 类并结合 Active Directory Service Interfaces (ADSI) - Active Directory 层次结构,来检索几乎所有关于本地网络的信息。

代码被分解为几个方法

  1. 获取计算机所属的域名:

     // VB.NET // ... Public Function GetLocalComputerInfo() As Boolean Dim query As <CODE>ManagementObjectSearcher Dim queryCollection As ManagementObjectCollection Dim query_command As String = "SELECT * FROM Win32_ComputerSystem" Dim msc As ManagementScope = New ManagementScope("root\cimv2") Dim select_query As SelectQuery = New SelectQuery(query_command) query = New ManagementObjectSearcher(msc, select_query) queryCollection = query.Get() Dim management_object As ManagementObject For Each management_object In queryCollection m_local_domain_name = management_object("Domain") m_local_computer_name = management_object("Name") Next management_object Return True End Function ... 
    其中:
    msc As ManagementScope 设置管理操作的范围 - 定义执行管理操作的 WMI 命名空间。

    一旦知道域名,我们就能够检索该域内的计算机列表。

  2. 枚举域内的计算机:

     // VB.NET // ... Public Function GetComputersInfoCollection(ByVal domain As String) _
    As DirectoryEntry Dim domainEntry As DirectoryEntry = New DirectoryEntry("WinNT://" _
    + domain) domainEntry.Children.SchemaFilter.Add("computer") Return domainEntry End Function ...
    其中:
    方法返回 DirectoryEntry 的实例 - Active Directory 层次结构中的节点,对应于给定的域。

    接下来,让我们检索属于该域的用户列表。

  3. 枚举域内的用户:

     // VB.NET // ... Public Function GetUsersInfoCollection(ByVal domain As String) _ 
    As ManagementObjectCollection Dim query As ManagementObjectSearcher Dim queryCollection As ManagementObjectCollection Dim msc As ManagementScope = New ManagementScope("root\cimv2") Dim query_command As String = _ "SELECT * FROM Win32_UserAccount WHERE Domain=" & _ Chr(34).ToString() & domain & Chr(34).ToString() 'Win32_UserAccount: 'see http://msdn.microsoft.com/library/default.asp?
    'url=/library/en-us/wmisdk/wmi/win32_useraccount.asp
    'class Win32_UserAccount : Win32_Account '{ ' uint32 AccountType; ' string Caption; ' string Description; ' boolean Disabled; ' string Domain; ' string FullName; ' datetime InstallDate; ' boolean LocalAccount; ' boolean Lockout; ' string Name; ' boolean PasswordChangeable; ' boolean PasswordExpires; ' boolean PasswordRequired; ' string SID; ' uint8 SIDType; ' string Status; '}; ' Dim select_query As SelectQuery = New SelectQuery(query_command) query = New ManagementObjectSearcher(msc, select_query) queryCollection = query.Get() Return queryCollection End Function ...


    除了能够检索以上信息之外,我们还可以获取给定计算机的服务集合:

  4. 使用 WMI 枚举计算机上的服务


        // VB.NET //
        ...
        Public Function GetServicesInfoCollection(ByVal computer_name _
    As String) _
    As ManagementObjectCollection Dim query As ManagementObjectSearcher Dim queryCollection As ManagementObjectCollection Dim msc As ManagementScope = New ManagementScope("\\" &_
    computer_name & "\root\cimv2") Dim query_command As String = "SELECT * FROM Win32_Service" 'Win32_UserAccount: 'see http://msdn.microsoft.com/library/en-us/wmisdk/wmi/
    'win32_service.asp?frame=true
    '
    ' class Win32_Service : Win32_BaseService '{ ' boolean AcceptPause; ' boolean AcceptStop; ' string Caption; ' uint32 CheckPoint; ' string CreationClassName; ' string Description; ' boolean DesktopInteract; ' string DisplayName; ' string ErrorControl; ' uint32 ExitCode; ' datetime InstallDate; ' string Name; ' string PathName; ' uint32 ProcessId; ' uint32 ServiceSpecificExitCode; ' string ServiceType; ' boolean Started; ' string StartMode; ' string StartName; ' string State; ' string Status; ' string SystemCreationClassName; ' string SystemName; ' uint32 TagId; ' uint32 WaitHint; '}; Dim select_query As SelectQuery = New SelectQuery(query_command) query = New ManagementObjectSearcher(msc, select_query) queryCollection = query.Get() Return queryCollection End Function ...

    关注点

    如果您想了解更多信息 - 请查看 Siccolo - 免费的 SQL Server 移动管理工具 以及更多文章在 Siccolo 的开发文章!

    历史

    目前没有改进。 几乎完美。

© . All rights reserved.