|
Вопрос # 1 693/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите, пожалуйста, как узнать IP адреса всех компьютеров находящихся в локальной сети (и можно ли это вообще сделать) с одного компьютера.
(Именно IP а не имена!!!). Заранее спасибо.
 |
Вопрос задал: 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]:
в общем задача практически неподёмная. Сисадмин всегда сможет так настроить сеть, что ни пинг, ни арп запросы ничего не покажут.
Лучше озвучить цели, которые хочеться достигнуть
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|