Как получить список (имена) компов локальных машин - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте , подскажите пожалуйста как можно получить список имен всех компьютеров подключенных в локальную сеть ? Я нашел готовый пример на вижуал бэйсик но мне нужен на C# . Просто так то я быстро могу разобраться в чужом коде и переделать его для своих нужд но тут жесть какая то. Помогите пожалуйста его переделать в код на c# если это вообще то (
Листинг программы
  1. Imports System.Runtime.InteropServices
  2. Public Class MasterBrowseList
  3. Private Const MAX_PREFERRED_LENGTH As Integer = -1&
  4. Private Const NERR_SUCCESS As Long = 0&
  5. Private Const ERROR_MORE_DATA As Long = 234&
  6. Private Const SV_TYPE_WORKSTATION As Long = &H1
  7. Private Const SV_TYPE_SERVER As Long = &H2
  8. Private Const SV_TYPE_SQLSERVER As Long = &H4
  9. Private Const SV_TYPE_DOMAIN_CTRL As Long = &H8
  10. Private Const SV_TYPE_DOMAIN_BAKCTRL As Long = &H10
  11. Private Const SV_TYPE_TIME_SOURCE As Long = &H20
  12. Private Const SV_TYPE_AFP As Long = &H40
  13. Private Const SV_TYPE_NOVELL As Long = &H80
  14. Private Const SV_TYPE_DOMAIN_MEMBER As Long = &H100
  15. Private Const SV_TYPE_PRINTQ_SERVER As Long = &H200
  16. Private Const SV_TYPE_DIALIN_SERVER As Long = &H400
  17. Private Const SV_TYPE_XENIX_SERVER As Long = &H800
  18. Private Const SV_TYPE_SERVER_UNIX As Long = SV_TYPE_XENIX_SERVER
  19. Private Const SV_TYPE_NT As Long = &H1000
  20. Private Const SV_TYPE_WFW As Long = &H2000
  21. Private Const SV_TYPE_SERVER_MFPN As Long = &H4000
  22. Private Const SV_TYPE_SERVER_NT As Long = &H8000
  23. Private Const SV_TYPE_POTENTIAL_BROWSER As Long = &H10000
  24. Private Const SV_TYPE_BACKUP_BROWSER As Long = &H20000
  25. Private Const SV_TYPE_MASTER_BROWSER As Long = &H40000
  26. Private Const SV_TYPE_DOMAIN_MASTER As Long = &H80000
  27. Private Const SV_TYPE_SERVER_OSF As Long = &H100000
  28. Private Const SV_TYPE_SERVER_VMS As Long = &H200000
  29. Private Const SV_TYPE_WINDOWS As Long = &H400000 'Windows95 +
  30. Private Const SV_TYPE_DFS As Long = &H800000 'Root of a DFS tree
  31. Private Const SV_TYPE_CLUSTER_NT As Long = &H1000000 'NT Cluster
  32. Private Const SV_TYPE_TERMINALSERVER As Long = &H2000000 'Terminal Server
  33. Private Const SV_TYPE_DCE As Long = &H10000000 'IBM DSS
  34. Private Const SV_TYPE_ALTERNATE_XPORT As Long = &H20000000 'return alternate transport
  35. Private Const SV_TYPE_LOCAL_LIST_ONLY As Long = &H40000000 'return local only
  36. Private Const SV_TYPE_DOMAIN_ENUM As Long = &H80000000
  37. Private Const SV_TYPE_ALL As Long = &HFFFFFFFF
  38. Private Const MAJOR_VERSION_MASK As Long = &HF
  39. Private Structure SERVER_INFO_101
  40. Dim PlatformID As Integer
  41. Dim Name As IntPtr
  42. Dim VersionMajor As Integer
  43. Dim VersionMinor As Integer
  44. Dim Type As Integer
  45. Dim Comment As IntPtr
  46. End Structure
  47. Private Declare Auto Function NetApiBufferFree Lib "netapi32.dll" (ByVal bufptr As IntPtr) As Integer
  48.  
  49. Private Declare Auto Function NetServerEnum Lib "netapi32.dll" _
  50. (ByVal nullptr As Integer, _
  51. ByVal Level As Integer, _
  52. ByRef BufPtr As IntPtr, _
  53. ByVal BufMaxLen As Integer, _
  54. ByRef EntriesRead As Integer, _
  55. ByRef TotalEntries As Integer, _
  56. ByVal ServerType As Integer, _
  57. ByVal Domain As IntPtr, _
  58. ByVal ResumeHandle As Integer) As Integer
  59.  
  60. Public Enum MACHINEPLATFORM As Integer
  61. DOS = 300
  62. OS2 = 400
  63. NT_2K_XP = 500
  64. OSF = 600
  65. VMS = 700
  66. End Enum
  67. <Flags()> Public Enum MACHINETYPE As Integer
  68. Workstation = &H1
  69. Server = &H2
  70. SQLServer = &H4
  71. DomainController = &H8
  72. BackupDomainController = &H10
  73. TimeSource = &H20
  74. AppleFileProtocolServer = &H40
  75. NovellServer = &H80
  76. DomainMember = &H100
  77. PrintServer = &H200
  78. DialinServer = &H400
  79. UnixOrXenix = &H800
  80. NT_2K_XP = &H1000
  81. WinForWorkgroups = &H2000
  82. ServerFilePrintForNetware = &H4000
  83. ServerNT = &H8000
  84. PotentialBrowser = &H10000
  85. BackupBrowser = &H20000
  86. MasterBrowser = &H40000
  87. DomainMaster = &H80000
  88. ServerOSF = &H100000
  89. ServerVMS = &H200000
  90. Windows95OrHigher = &H400000
  91. DFSRoot = &H800000
  92. ClusterNode = &H1000000
  93. TerminalServer = &H2000000
  94. ClusterVirtualServer = &H4000000
  95. End Enum
  96. Public Structure MACHINE
  97. Dim Platform As MACHINEPLATFORM
  98. Dim Name As String
  99. Dim VersionMajor As Integer
  100. Dim VersionMinor As Integer
  101. Dim TypeBits As MACHINETYPE
  102. Dim Comment As String
  103. End Structure
  104. Public Shared Function GetMasterBrowseList() As MACHINE()
  105. Return GetMasterBrowseList(Nothing)
  106. End Function
  107. Public Shared Function GetMasterBrowseList(ByVal Domain As String) As MACHINE()
  108. Dim BrowseList As New ArrayList
  109. Dim BufPtr As IntPtr
  110. Dim se101 As SERVER_INFO_101
  111. Dim StructSize As Integer = Marshal.SizeOf(se101)
  112. Dim EntriesRead As Integer
  113. Dim TotalEntries As Integer
  114. Dim ServerType As Integer = SV_TYPE_WORKSTATION Or SV_TYPE_SERVER
  115. Dim DomainPtr As IntPtr
  116. If Domain Is Nothing Or Domain = "" Then
  117. DomainPtr = New IntPtr(0)
  118. Else
  119. 'we are faking a constant string here with a BSTR by appending
  120. 'a null character. we'll free it afterwards
  121. DomainPtr = Marshal.StringToBSTR(Domain & Chr(0))
  122. End If
  123. Dim ret As Integer = NetServerEnum(0, _
  124. 101, _
  125. BufPtr, _
  126. MAX_PREFERRED_LENGTH, _
  127. EntriesRead, _
  128. TotalEntries, _
  129. ServerType, _
  130. DomainPtr, _
  131. 0)
  132. Marshal.FreeBSTR(DomainPtr)
  133. Try
  134. If ret = NERR_SUCCESS Then
  135. Dim nextbufptr As IntPtr
  136. For t As Integer = 0 To EntriesRead - 1
  137. 'copy memory chunk OF SIZE StructSize
  138. ' FROM LOC bufptr + (StructSize + t)
  139. ' INTO LOC se101
  140. nextbufptr = New IntPtr(BufPtr.ToInt32 + (StructSize * t))
  141. se101 = Marshal.PtrToStructure(nextbufptr, GetType(SERVER_INFO_101))
  142. Dim themachine As MACHINE
  143. themachine.Name = Marshal.PtrToStringUni(se101.Name)
  144. themachine.Comment = Marshal.PtrToStringUni(se101.Comment)
  145. themachine.Platform = se101.PlatformID
  146. themachine.TypeBits = se101.Type
  147. themachine.VersionMajor = se101.VersionMajor And MAJOR_VERSION_MASK
  148. themachine.VersionMinor = se101.VersionMinor
  149. BrowseList.Add(themachine)
  150. Next
  151. End If
  152. Catch ex As Exception
  153. Throw ex
  154. Finally
  155. NetApiBufferFree(BufPtr)
  156. End Try
  157. Return BrowseList.ToArray(GetType(MACHINE))
  158. End Function
  159. End Class
  160. 2. Create a test container. I used a console application and ran this code:
  161. Module Module1
  162. Sub Main()
  163. Dim machine As MasterBrowseList.MACHINE
  164. Dim machineList() As MasterBrowseList.MACHINE
  165. machineList = MasterBrowseList.GetMasterBrowseList
  166. Console.WriteLine("Name" & vbTab & "Platform" & vbTab & "Version")
  167. Console.WriteLine("==========================================================")
  168. For Each machine In machineList
  169. With machine
  170. Console.WriteLine(.Name & vbTab & .Platform & vbTab & .VersionMajor & "." & .VersionMinor)
  171. End With
  172. Next
  173. Console.WriteLine("Press any key to exit")
  174. Console.Read()
  175. End Sub
  176. End Module

Решение задачи: «Как получить список (имена) компов локальных машин»

textual
Листинг программы
  1. using System;
  2. using System.Collections;
  3. using System.Runtime.InteropServices;
  4.  
  5. namespace ServerEnum
  6. {
  7.     internal class Class1
  8.     {
  9.         [DllImport("netapi32.dll", EntryPoint="NetServerEnum")]
  10.         public static extern NERR NetServerEnum([MarshalAs(UnmanagedType.LPWStr)] string ServerName, int Level, out IntPtr BufPtr, int PrefMaxLen, ref int EntriesRead, ref int TotalEntries, SV_101_TYPES ServerType, [MarshalAs(UnmanagedType.LPWStr)] string Domain, int ResumeHandle);
  11.  
  12.         [DllImport("netapi32.dll", EntryPoint="NetApiBufferFree")]
  13.         public static extern NERR NetApiBufferFree(IntPtr Buffer);
  14.  
  15.        
  16.         [Flags]
  17.         public enum SV_101_TYPES : uint
  18.         {
  19.             SV_TYPE_WORKSTATION = 0x00000001,
  20.             SV_TYPE_SERVER = 0x00000002,
  21.             SV_TYPE_SQLSERVER = 0x00000004,
  22.             SV_TYPE_DOMAIN_CTRL = 0x00000008,
  23.             SV_TYPE_DOMAIN_BAKCTRL = 0x00000010,
  24.             SV_TYPE_TIME_SOURCE = 0x00000020,
  25.             SV_TYPE_AFP = 0x00000040,
  26.             SV_TYPE_NOVELL = 0x00000080,
  27.             SV_TYPE_DOMAIN_MEMBER = 0x00000100,
  28.             SV_TYPE_PRINTQ_SERVER = 0x00000200,
  29.             SV_TYPE_DIALIN_SERVER = 0x00000400,
  30.             SV_TYPE_XENIX_SERVER = 0x00000800,
  31.             SV_TYPE_SERVER_UNIX = SV_TYPE_XENIX_SERVER,
  32.             SV_TYPE_NT = 0x00001000,
  33.             SV_TYPE_WFW = 0x00002000,
  34.             SV_TYPE_SERVER_MFPN = 0x00004000,
  35.             SV_TYPE_SERVER_NT = 0x00008000,
  36.             SV_TYPE_POTENTIAL_BROWSER = 0x00010000,
  37.             SV_TYPE_BACKUP_BROWSER = 0x00020000,
  38.             SV_TYPE_MASTER_BROWSER = 0x00040000,
  39.             SV_TYPE_DOMAIN_MASTER = 0x00080000,
  40.             SV_TYPE_SERVER_OSF = 0x00100000,
  41.             SV_TYPE_SERVER_VMS = 0x00200000,
  42.             SV_TYPE_WINDOWS = 0x00400000,
  43.             SV_TYPE_DFS = 0x00800000,
  44.             SV_TYPE_CLUSTER_NT = 0x01000000,
  45.             SV_TYPE_TERMINALSERVER = 0x02000000,
  46.             SV_TYPE_CLUSTER_VS_NT = 0x04000000,
  47.             SV_TYPE_DCE = 0x10000000,
  48.             SV_TYPE_ALTERNATE_XPORT = 0x20000000,
  49.             SV_TYPE_LOCAL_LIST_ONLY = 0x40000000,
  50.             SV_TYPE_DOMAIN_ENUM = 0x80000000,
  51.             SV_TYPE_ALL = 0xFFFFFFFF,
  52.         }
  53.  
  54.         [StructLayout(LayoutKind.Sequential)]
  55.             public struct SERVER_INFO_101
  56.         {
  57.             [MarshalAs(UnmanagedType.U4)] public uint sv101_platform_id;
  58.             [MarshalAs(UnmanagedType.LPWStr)] public string sv101_name;
  59.             [MarshalAs(UnmanagedType.U4)] public uint sv101_version_major;
  60.             [MarshalAs(UnmanagedType.U4)] public uint sv101_version_minor;
  61.             [MarshalAs(UnmanagedType.U4)] public uint sv101_type;
  62.             [MarshalAs(UnmanagedType.LPWStr)] public string sv101_comment;
  63.         }
  64.  
  65.        
  66.         public enum PLATFORM_ID : uint
  67.         {
  68.             PLATFORM_ID_DOS = 300,
  69.             PLATFORM_ID_OS2 = 400,
  70.             PLATFORM_ID_NT = 500,
  71.             PLATFORM_ID_OSF = 600,
  72.             PLATFORM_ID_VMS = 700,
  73.         }
  74.  
  75.              
  76.         public enum NERR
  77.         {
  78.             NERR_Success = 0,
  79.             ERROR_ACCESS_DENIED = 5,
  80.             ERROR_NOT_ENOUGH_MEMORY = 8,
  81.             ERROR_BAD_NETPATH = 53,
  82.             ERROR_NETWORK_BUSY = 54,
  83.             ERROR_INVALID_PARAMETER = 87,
  84.             ERROR_INVALID_LEVEL = 124,
  85.             ERROR_MORE_DATA = 234,
  86.             ERROR_EXTENDED_ERROR = 1208,
  87.             ERROR_NO_NETWORK = 1222,
  88.             ERROR_INVALID_HANDLE_STATE = 1609,
  89.             ERROR_NO_BROWSER_SERVERS_FOUND = 6118,
  90.         }
  91.  
  92.         public static ArrayList GetServerList(SV_101_TYPES type)
  93.         {
  94.             SERVER_INFO_101 si;
  95.             IntPtr pInfo = IntPtr.Zero;
  96.             int etriesread = 0;
  97.             int totalentries = 0;
  98.             ArrayList srvs = new ArrayList();
  99.  
  100.             try
  101.             {
  102.                 NERR err = NetServerEnum(null, 101, out pInfo, -1, ref etriesread, ref totalentries, type, null, 0);
  103.                 if ((err == NERR.NERR_Success || err == NERR.ERROR_MORE_DATA) && pInfo != IntPtr.Zero)
  104.                 {
  105.                     int ptr = pInfo.ToInt32();
  106.                     for (int i = 0; i < etriesread; i++)
  107.                     {
  108.                         si = (SERVER_INFO_101) Marshal.PtrToStructure(new IntPtr(ptr), typeof (SERVER_INFO_101));
  109.                         srvs.Add(si.sv101_name);
  110.  
  111.                         ptr += Marshal.SizeOf(si);
  112.                     }
  113.                 }
  114.             }
  115.             catch (Exception)
  116.             {
  117.             }
  118.             finally
  119.             {
  120.                 if (pInfo != IntPtr.Zero)
  121.                 {
  122.                     NetApiBufferFree(pInfo);
  123.                 }
  124.             }
  125.             return (srvs);
  126.         }
  127.  
  128.         [STAThread]
  129.         static void Main()
  130.         {
  131.             Console.WriteLine("{0} WORKSTATION", new string('=', 10)); 
  132.             ArrayList list = GetServerList(SV_101_TYPES.SV_TYPE_WORKSTATION);
  133.             foreach (string name in list)
  134.             {
  135.                 Console.WriteLine(name);   
  136.             }
  137.             Console.WriteLine("{0} UNIX", new string('=', 10));
  138.             list = GetServerList(SV_101_TYPES.SV_TYPE_SERVER_UNIX);
  139.             foreach (string name in list)
  140.             {
  141.                 Console.WriteLine(name);   
  142.             }
  143.  
  144.            
  145.  
  146.             Console.ReadLine();
  147.         }
  148.     }
  149. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы