Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/107: Рейтинг темы: голосов - 107, средняя оценка - 4.65
215 / 215 / 20
Регистрация: 18.05.2010
Сообщений: 865
1

Как получить список компьютеров в сети?

25.02.2011, 20:41. Показов 19381. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток. Как получить список компьютеров в сети используя только классы .NET без всякиз API.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2011, 20:41
Ответы с готовыми решениями:

Получить список компьютеров в сети
Доброго времени суток!!! Как получить список компьютеров в сети и произвести листинг открытых...

Получить список компьютеров в локальной сети
Здравствуйте!Ребят срочно помогите мне нужно в С# создать программу которая может соединить...

Проверка компьютеров в сети
Товарищи, подскажите как реализовать таку схему: У меня есть локальная сеть, есть IP машины -...

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

10
86 / 85 / 13
Регистрация: 21.10.2010
Сообщений: 349
26.02.2011, 19:46 2
Лучший ответ Сообщение было отмечено NickoTin как решение

Решение

Ну собственно вот так:
Для работы кода необходимо подключить пространство имен System.DirectoryServices
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void FillServers()
       {
           DirectoryEntry parent = new DirectoryEntry("WinNT:");
           foreach (DirectoryEntry dm in parent.Children)
           {
               DirectoryEntry coParent = new DirectoryEntry("WinNT://" + dm.Name);
               DirectoryEntries dent = coParent.Children;
               dent.SchemaFilter.Add("Computer");
               foreach (DirectoryEntry client in dent)
               {
                   serversList.Items.Add(client.Name);
               }
 
           }
       }
Но предупреждаю работает очень медленно, в отличае от апи функций
2
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115
29.06.2011, 17:30 3
А как сделать используя API функции?

Добавлено через 13 минут
Vangok, можешь вкратце русским языком пояснить что этот код делает?
0
38 / 38 / 5
Регистрация: 03.06.2010
Сообщений: 120
30.06.2011, 10:16 4
Лучший ответ Сообщение было отмечено как решение

Решение

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

Да проект создавался под окна, автор привел только класс
C#
1
ComputersInLocalNetwork
отвечающий за получения списка компьютеров

Использовать его можно и в консольном приложении, но ты его использовать нигде не сможешь, судя по твоим вопросам, и начинать тебе надо с

C#
1
Console.WriteLine("Hello world");
0
0 / 0 / 0
Регистрация: 13.06.2015
Сообщений: 10
05.07.2016, 06:50 7
Не могу понять, как мне отобразить список серверов в ListBox-е?
0
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
09.07.2016, 20:15 8
listbox1.Items.AddRange(GetServerList(...).ToArray());
1
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
10.07.2016, 19:48 9
BulletinOTP, здесь пример
Как получить список (имена) компов локальных машин
0
3 / 3 / 0
Регистрация: 04.10.2014
Сообщений: 40
30.03.2019, 11:36 10
Цитата Сообщение от Vangok Посмотреть сообщение
Ну собственно вот так:
Для работы кода необходимо подключить пространство имен System.DirectoryServices
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void FillServers()
       {
           DirectoryEntry parent = new DirectoryEntry("WinNT:");
           foreach (DirectoryEntry dm in parent.Children)
           {
               DirectoryEntry coParent = new DirectoryEntry("WinNT://" + dm.Name);
               DirectoryEntries dent = coParent.Children;
               dent.SchemaFilter.Add("Computer");
               foreach (DirectoryEntry client in dent)
               {
                   serversList.Items.Add(client.Name);
               }
 
           }
       }

Но предупреждаю работает очень медленно, в отличае от апи функций
А что означает здесь строка "WinNT://"? Имя ПК?
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
30.03.2019, 21:13 11
strcmp75, это просто префикс задающий синтаксис пути далее. В данном случае к нему добавляется имя рабочей группы/домена.
0
30.03.2019, 21:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2019, 21:13
Помогаю со студенческими работами здесь

IP адреса всех компьютеров в сети
Всем привет) Вопрос собственно в названии: Как найти IP-адреса компьютеров в (локальной, хотя...

Проверка включенных компьютеров в сети
Добрый день. Как получить список компьютеров в сети , и отдельно список тех компьютеров , которые...

Получение списка локальных компьютеров сети
Кто подскажет куда двигаться и что почитать, чтобы получить список локальных компьютеров в сети!

Соединение двух компьютеров локальной сети
Здравствуйте, я хочу обмениваться сообщениями между двумя компьютерами в локальной сети. У одного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru