Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
AngelusNine
0 / 0 / 0
Регистрация: 13.04.2016
Сообщений: 15
1

IP адреса сети выданные DHCP сервером

20.09.2017, 11:39. Просмотров 1593. Ответов 12
Метки dhcp (Все метки)

Добрый день. Прошу помочь и сильно не пинать) Вопрос достаточно банальный и я знаю что ответов на него достаточно большое количество, но к сожалению не достаточно точных. Суть вопроса: нужно лучить список IP адресов сети. По факту ответов дано много и даже на донном форуме, но... Меня интересует не список адресов которые засветились на моем компьютере или адреса на которых есть открытая шара, либо они откликнулись на пинг... Меня интересует список адресов которые были выданы DHCP сервером. Может есть какой то способ получить этот список, т.к. шары и пинги не самый лучший вариант. Компьютер может не шарить ни чего... Или не отвечать на пинги... Это может быть не компьютер, а маршрутизатор, IP телефон, принтер или иное сетевое устройство. И все варианты которые я находил не показывают эти устройство. А хотелось бы получить полный список занятых адресов локальной сети.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2017, 11:39
Ответы с готовыми решениями:

Обязательно ли сервер SMTP должен совпадать с сервером электронного адреса?
Здравствуйте, господа! Я пишу диплом: почтовый клиент документооборота. Хотел у Вас...

Не назначен адрес от сети (DHCP сервером)
Есть небольшая сеть, оптика в роутер, тот на хаб раздаёт, всё вроде бы ничего, но на днях случился...

Нужно развернуть DHCP-сервер на контроллере домена. Как бы сделать так, что бы он не менял выданные ранее...
Нужно развернуть DHCP-сервер на контроллере домена. Как бы сделать так, что бы он не менял выданные...

Как можно настроить схеме сети для получения IP адреса по DHCP из другого VLAN?
Подскажите пожалуйста как можно настроить схеме сети для получения IP адреса по DHCP из другого...

Проблема с DHCP сервером
Всех приветствую. У меня есть пару вопросов. 1) У меня идет тупизм, с раздачей интернета и...

12
lvlkoo
.NET C#,ASP.NET MVC
Эксперт .NET
542 / 464 / 213
Регистрация: 16.10.2010
Сообщений: 1,860
Завершенные тесты: 2
20.09.2017, 12:03 2
С компьютера клиента - только сканированием всей подсети, если ваш DHCP не имеет никакого "апи", которое умеет отдавать таблицу адресов по запросу.
0
AngelusNine
0 / 0 / 0
Регистрация: 13.04.2016
Сообщений: 15
20.09.2017, 12:12  [ТС] 3
Я правильно понимаю, под сканированием подразумевается различные варианты пинга?
0
lvlkoo
.NET C#,ASP.NET MVC
Эксперт .NET
542 / 464 / 213
Регистрация: 16.10.2010
Сообщений: 1,860
Завершенные тесты: 2
20.09.2017, 12:17 4
Цитата Сообщение от AngelusNine Посмотреть сообщение
Я правильно понимаю, под сканированием подразумевается различные варианты пинга?
А их разве много?
0
20.09.2017, 12:17
AngelusNine
0 / 0 / 0
Регистрация: 13.04.2016
Сообщений: 15
20.09.2017, 12:21  [ТС] 5
Как показывает практика реализаций много))) Я просто сейчас проверяю один из вариантов, который нашел на форуме.. Запустил, получил список IP. открываю DHCP сервер сверяю адреса и все равно список не полный... И ладно когда там андройд устройство не определилось... Но в список не попадают IP адреса компьютеров которые стоят рядом со мной(
0
Diamante
1407 / 1087 / 681
Регистрация: 14.08.2016
Сообщений: 3,800
Завершенные тесты: 1
20.09.2017, 12:23 6
только пинг... если задача стоит такая, что пофиг на временную неработоспособность сети, но вынь да положь список занятых IP, можно попробовать менять свой ip по порядочку и ловить ошибки задваивания ip в сети
а в чем смысл получения такого списка силами шарпа?
0
AngelusNine
0 / 0 / 0
Регистрация: 13.04.2016
Сообщений: 15
20.09.2017, 12:29  [ТС] 7
Смысл получения такого списка заключается в дальнейшей обработке полученной информации. В конечном итоге интересно получения информации о ПК (технические характеристики, частично программные). В общем там достаточно много всего. И да часть этой информации будет получатся в любом случае по средствам клиент серверного приложения... Но для начала надо поставить клиент на машину. А если рассматривать что в сети находится несколько сотен машин, ходить и на каждую ставить не очень хочется... А для удаленной установки нужно получить список потенциальных клиентов.
0
lvlkoo
.NET C#,ASP.NET MVC
Эксперт .NET
542 / 464 / 213
Регистрация: 16.10.2010
Сообщений: 1,860
Завершенные тесты: 2
20.09.2017, 12:37 8
Лучший ответ Сообщение было отмечено AngelusNine как решение

Решение

Цитата Сообщение от AngelusNine Посмотреть сообщение
Как показывает практика реализаций много))) Я просто сейчас проверяю один из вариантов, который нашел на форуме.. Запустил, получил список IP. открываю DHCP сервер сверяю адреса и все равно список не полный... И ладно когда там андройд устройство не определилось... Но в список не попадают IP адреса компьютеров которые стоят рядом со мной(
Не имею понятия о каких вы реализациях вы говорите, я имел ввиду обычный обмен ICMP пакетами.
К сожалению, думаю что другого варианта не существует. Если фаервол заблокировал запрос, то понять был он заблокирован или эта единица сети отсутствует нельзя

Добавлено через 3 минуты
Цитата Сообщение от AngelusNine Посмотреть сообщение
Смысл получения такого списка заключается в дальнейшей обработке полученной информации. В конечном итоге интересно получения информации о ПК (технические характеристики, частично программные). В общем там достаточно много всего. И да часть этой информации будет получатся в любом случае по средствам клиент серверного приложения... Но для начала надо поставить клиент на машину. А если рассматривать что в сети находится несколько сотен машин, ходить и на каждую ставить не очень хочется... А для удаленной установки нужно получить список потенциальных клиентов.
Сеть то ваша, пройдитесь по всем рабочим станциям, настройте фаервол, а потом химичте удаленно что хотите

Добавлено через 2 минуты
Ну или как вариант пойти на dhcp, выгрузить список резерваций (думаю что для этого есть какойто механизм) и скормить вашему ПО
0
AngelusNine
0 / 0 / 0
Регистрация: 13.04.2016
Сообщений: 15
20.09.2017, 12:54  [ТС] 9
Спасибо за ответ.
0
OwenGlendower
Супер-модератор
Эксперт .NET
10596 / 9108 / 3883
Регистрация: 17.03.2014
Сообщений: 18,237
Записей в блоге: 1
Завершенные тесты: 2
20.09.2017, 15:12 10
AngelusNine, возможно тебе поможет код из Querying Windows DHCP Server With C#
копия кода с сайта
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
using System;
using System.Runtime.InteropServices;
using System.Collections;
using System.Net;
 
namespace dhcp
{
    // c# class for processed clients
 
    public class dhcpClient
    {
        public string hostname { get; set; }
        public string ip       { get; set; }
        public string mac      { get; set; }
    }
 
    // structs for use with call to unmanaged code
 
    [StructLayout(LayoutKind.Sequential)]
    public struct DHCP_CLIENT_INFO_ARRAY
    {
        public uint NumElements;
        public IntPtr Clients;
    }
 
    [StructLayout(LayoutKind.Sequential)]
    public struct DHCP_CLIENT_UID
    {
        public uint DataLength;
        public IntPtr Data;
    }
 
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct DHCP_CLIENT_INFO
    {
        public uint ip;
        public uint subnet;
 
        public DHCP_CLIENT_UID mac;
 
        [MarshalAs(UnmanagedType.LPWStr)]
        public string ClientName;
 
        [MarshalAs(UnmanagedType.LPWStr)]
        public string ClientComment;
    }
 
    // main
 
    class Program
    {
        static void Main()
        {
            try
            {
                // get settings
 
                String server, subnet;
 
                Console.Write("Enter server : ");
                server = Console.ReadLine();
                Console.Write("Enter subnet : ");
                subnet = Console.ReadLine();
 
                // gather clients
 
                ArrayList clients = findDhcpClients(server, subnet);
 
                // output results
 
                Console.WriteLine();
 
                foreach (dhcpClient d in clients)
                    Console.WriteLine(String.Format("{0,-35} {1,-15} {2,-15}", d.hostname, d.ip, d.mac));
 
                Console.WriteLine('\n' + clients.Count.ToString() + " lease(s) in total");
            }
 
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
 
            Console.ReadLine();
        }
 
        static ArrayList findDhcpClients(string server, string subnet)
        {
            // set up container for processed clients
 
            ArrayList foundClients = new ArrayList();
 
            // make call to unmanaged code
 
            uint parsedMask     = StringIPAddressToUInt32(subnet);
            uint resumeHandle   = 0;
            uint numClientsRead = 0;
            uint totalClients   = 0;
 
            IntPtr info_array_ptr;
 
            uint response = DhcpEnumSubnetClients(
                server,
                parsedMask,
                ref resumeHandle,
                65536,
                out info_array_ptr,
                ref numClientsRead,
                ref totalClients
                );
 
            // set up client array casted to a DHCP_CLIENT_INFO_ARRAY
            // using the pointer from the response object above
 
            DHCP_CLIENT_INFO_ARRAY rawClients =
                (DHCP_CLIENT_INFO_ARRAY)Marshal.PtrToStructure(info_array_ptr, typeof(DHCP_CLIENT_INFO_ARRAY));
 
            // loop through the clients structure inside rawClients 
            // adding to the dchpClient collection
 
            IntPtr current = rawClients.Clients;
 
            for (int i = 0; i < (int)rawClients.NumElements; i++)
            {
                // 1. Create machine object using the struct
 
                DHCP_CLIENT_INFO rawMachine =
                    (DHCP_CLIENT_INFO)Marshal.PtrToStructure(Marshal.ReadIntPtr(current), typeof(DHCP_CLIENT_INFO));
 
                // 2. create new C# dhcpClient object and add to the 
                // collection (for hassle-free use elsewhere!!)
 
                dhcpClient thisClient = new dhcpClient();
 
                thisClient.ip = UInt32IPAddressToString(rawMachine.ip);
 
                thisClient.hostname = rawMachine.ClientName;
 
                thisClient.mac = String.Format("{0:x2}{1:x2}.{2:x2}{3:x2}.{4:x2}{5:x2}",
                    Marshal.ReadByte(rawMachine.mac.Data),
                    Marshal.ReadByte(rawMachine.mac.Data, 1),
                    Marshal.ReadByte(rawMachine.mac.Data, 2),
                    Marshal.ReadByte(rawMachine.mac.Data, 3),
                    Marshal.ReadByte(rawMachine.mac.Data, 4),
                    Marshal.ReadByte(rawMachine.mac.Data, 5));
 
                foundClients.Add(thisClient);
 
                // 3. move pointer to next machine
 
                current = (IntPtr)((int)current + (int)Marshal.SizeOf(typeof(IntPtr)));
            }
 
            return foundClients;
        }
 
        public static uint StringIPAddressToUInt32(string ip)
        {
            // convert string IP to uint IP e.g. "1.2.3.4" -> 16909060
 
            IPAddress i = System.Net.IPAddress.Parse(ip);
            byte[] ipByteArray = i.GetAddressBytes();
 
            uint ipUint = (uint)ipByteArray[0] << 24;
            ipUint += (uint)ipByteArray[1] << 16;
            ipUint += (uint)ipByteArray[2] << 8;
            ipUint += (uint)ipByteArray[3];
 
            return ipUint;
        }
 
        public static string UInt32IPAddressToString(uint ip)
        {
            // convert uint IP to string IP e.g. 16909060 -> "1.2.3.4"
 
            IPAddress i = new IPAddress(ip);
            string[] ipArray = i.ToString().Split('.');
 
            return ipArray[3] + "." + ipArray[2] + "." + ipArray[1] + "." + ipArray[0];
        }
 
        [DllImport("dhcpsapi.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern uint DhcpEnumSubnetClients(
                string ServerIpAddress,
                uint SubnetAddress,
            ref uint ResumeHandle,
                uint PreferredMaximum,
            out IntPtr ClientInfo,
            ref uint ElementsRead,
            ref uint ElementsTotal
        );
    }
}


Добавлено через 1 минуту
Для Microsoft DHCP есть библиотека DhcpServerApi
3
Почтальон
Модератор
784 / 653 / 132
Регистрация: 22.03.2015
Сообщений: 4,406
Завершенные тесты: 2
20.09.2017, 15:20 11
OwenGlendower, эта библа для любой серверной оси линейки Мелких ?
0
OwenGlendower
Супер-модератор
Эксперт .NET
10596 / 9108 / 3883
Регистрация: 17.03.2014
Сообщений: 18,237
Записей в блоге: 1
Завершенные тесты: 2
20.09.2017, 15:21 12
Почтальон, не знаю. Надо пробовать.
0
IamRain
1422 / 1265 / 399
Регистрация: 02.08.2011
Сообщений: 3,752
20.09.2017, 15:38 13
AngelusNine, есть такая замечательная утилита, называется NMAP, она позволяет выполнять сканирание сети, сканирование определенных узлов, причем различными способами, выдавать относительно точную информацию об установленных ОС на этих узлах, и т.д, и т.п. В конце концов, имеется даже lua-based scripting engine, с помощью которого вы можете выполнять кастомную логику проверок в своих собственных скриптах на каждом узле из указанного диапазона. Думаю, этот вариант стоит также проверить.
0
20.09.2017, 15:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2017, 15:38

Клиент не соединяется с DHCP-сервером
Установил на debian пакет isc-dhcp-server. В файле /etc/dhcp/dhcpd.conf записано: subnet...

DHCP, не отображаются арендованные адреса
Создал DHCP сервер, адреса раздаются. сперва делал ни виртуальной машине с 0 все ок работает. а в...

VLAN, раздать адреса по DHCP
Здравствуйте. Учусь работать в Packet Tracer. Нужно раздать ip адреса для каждого компютера в...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru