Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.06;
Скачать: CL | DM;

Вниз

Как получить список компов в локальной сети?   Найти похожие ветки 

 
Lex ©   (2003-01-18 10:49) [0]

Или, хотя бы, как проверить, что комп с именем name подключен к сети? OS - Windows NT4. Спасибо.


 
NewGuest   (2003-01-18 13:58) [1]

Список компов...

function enumResourcesIn(Workgroup: string): boolean;
var
EnumHandle: THandle;
WorkgroupRS: TNetResource;
BufSize: Cardinal;
Entries: Cardinal;
Rest: Cardinal;
begin
ResourceCount:=0;
Workgroup:=Workgroup+#0;
FillChar(WorkgroupRS, SizeOf(WorkgroupRS), 0);
with WorkgroupRS do begin
dwScope:=RESOURCE_GLOBALNET;
dwType:=RESOURCETYPE_ANY;
dwDisplayType:=RESOURCEDISPLAYTYPE_DOMAIN;
dwUsage:=RESOURCEUSAGE_CONTAINER;
lpRemoteName:=@Workgroup[1];
end;
WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @WorkgroupRS, EnumHandle);
Entries:=200;
BufSize:=SizeOf(NetResources);
Rest:=WNetEnumResource(EnumHandle, Entries, @NetResources[0], BufSize);
if (Rest=NO_ERROR) and (Entries>0) then Result:=true else Result:=false;
ResourceCount:=Entries;
WNetCloseEnum(EnumHandle);
end;



Пропинговать отдельный комп (WinSock подключи)

function getNameOf(const IP: string): string;
var
h: PHostEnt;
addr: TSockAddr;
GInitData: TWSADATA;
begin
WSAStartup($101, GInitData);
Result:="";
addr.sin_addr.s_addr:=inet_addr(pchar(IP));
if addr.sin_addr.s_addr<>INADDR_NONE then
begin
h:=gethostbyaddr(@addr.sin_addr.s_addr, sizeof(addr), AF_INET);
if h<>nil then Result:=h^.h_name
end;
WSACleanup
end;


 
NewGuest   (2003-01-18 13:59) [2]

вот переменные, кот. требуются в примере списка компов

ResourceCount : Integer;
NetResources: array[0..200]of TNetResource;


 
sinm   (2003-01-19 05:29) [3]

Хочу добавить, что пинга мало, если нужно все сделать быстро. Лучше (если, конечно, не лень) послать на 137/udp запрос с заданным таймаутом. Если таймаут (в локале где-то 50-70 мсек) превзойден, то комп не отдаст своего имени. Если задача не имеет смысла без опроса по smb, тj надо сделать connect(timeout) на порт 139/tcp. А если надо получить простой набор компов, на которых загружен стек ip, то легче по icmp отправить запрос на последний (255?) адрес вашей маски и после этого читать ответы из буфера. Правда при этом надо быть уверенным в том, что прямые широковещательные сообщения не экранируются маршрутизаторами/свитчами/стенами.


 
Lex ©   (2003-01-19 12:02) [4]

NewGuest> Можешь объяснить, как это все работает, или скажи, в какой переменной хранится список компов? И как его в tstrings преобразовать?
sinm> Я не спец в этой области, так что попроще, пожалуйста :)



Страницы: 1 вся ветка

Текущий архив: 2003.03.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
3-16902
cat_si
2003-02-14 16:45
2003.03.06
Размер базы данных


14-17270
Шоломицкий
2003-02-19 14:57
2003.03.06
DBNavigator


1-17161
Radion
2003-02-23 17:30
2003.03.06
А как, с помошю цикла, наити самое большое число в Массиве?


14-17362
delpher_gray
2003-02-18 14:50
2003.03.06
Новый сайт о Delphi ! Delphi - Программирование в Delphi !


14-17312
Малой
2003-02-17 12:50
2003.03.06
пуск