Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 693

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Подскажите, пожалуйста, как узнать IP адреса всех компьютеров находящихся в локальной сети (и можно ли это вообще сделать) с одного компьютера.
(Именно IP а не имена!!!). Заранее спасибо.

informmm Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: informmm (статус: Посетитель)
Вопрос отправлен: 15 июня 2008, 23:01
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: ANBsoft

Здравствуйте, informmm!
Один из простых вариантов - пропинговать весь диапазон своей подсети и узнать IP всех компьютеров.
Существует один нюанс. На многих компьютерах сейчас стоят фаерволы, которые не позволяют ответить на пинг, простой вариант решения - сразу после пинга выполнить "arp -a" и получить список всех IP (а заодно и МАС) адресов.
Кроме того посмотрите тут:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=32
http://www.delphirus.com/modules.php?name=Pages&pa=list_pages_categories&cid=76
Успехов.

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 15 июня 2008, 23:38
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, informmm!
Можете попробовать вот этот пример:

var 
Computer: array[1..500] of string[25]; 
ComputerCount: Integer; 
 
procedure FindAllComputers(Workgroup: string); 
var 
EnumHandle: THandle; 
WorkgroupRS: TNetResource; 
Buf: array[1..500] of TNetResource; 
BufSize: Integer; 
Entries: Integer; 
Result: Integer; 
begin 
ComputerCount := 0; 
Workgroup := Workgroup + #0; 
FillChar(WorkgroupRS, SizeOf(WorkgroupRS), 0); 
with WorkgroupRS do 
   begin 
     dwScope := 2; 
     dwType := 3; 
     dwDisplayType := 1; 
     dwUsage := 2; 
     lpRemoteName := @Workgroup[1]; 
   end; 
WNetOpenEnum(RESOURCE_GLOBALNET, 
   RESOURCETYPE_ANY, 
   0, 
   @WorkgroupRS, 
   EnumHandle); 
repeat 
   Entries := 1; 
   BufSize := SizeOf(Buf); 
   Result := 
     WNetEnumResource(EnumHandle, 
     Entries, 
     @Buf, 
     BufSize); 
   if (Result = NO_ERROR) and (Entries = 1) then 
     begin 
       Inc(ComputerCount); 
       Computer[ComputerCount] := StrPas(Buf[1].lpRemoteName); 
     end; 
until (Entries <> 1) or (Result <> NO_ERROR); 
WNetCloseEnum(EnumHandle); 
end; { Find All Computers }
Или скачать другой демонстрационный пример. Там же можете найти и другие примеры.
Желаю удачи.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 17 июня 2008, 19:06


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 16 июня 2008, 00:53; участников в обсуждении: 1.
Вадим К

Вадим К (статус: Академик), 16 июня 2008, 00:53 [#1]:

в общем задача практически неподёмная. Сисадмин всегда сможет так настроить сеть, что ни пинг, ни арп запросы ничего не покажут.
Лучше озвучить цели, которые хочеться достигнуть
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.03 сек.