Имя удаленного компьютера - C#

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

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

Здравствуйте, подскажите пожалуйста как узнать имена доступных удаленных компьютеров? Моя программа читает журналы событий винды и как аргумент для чтения там используется имя компьютера, локального или удаленного. Можно как нибудь собрать имена всех компьютеров, к которым есть доступ?

Решение задачи: «Имя удаленного компьютера»

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

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


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

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

12   голосов , оценка 4 из 5

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

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

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