Хочу написать программу, которая бы лазила по открытым папкам в локальной сети (домены на Windows 2000) с целью поиска файлов mp3, avi и т.п. и записывала бы названия этих файлов в текстовый файл. Какой механизм использовать? каков должен быть алгоритм? есть ли где исходники такого типа?
Получаеш все компы в сети.В цыкле пробегаешся по списку в поисках ресурсов (NetShareEnum - см. мсдн). Далее рулиш по списку ресурсов и ищешь файлы как на локале.
Ок, достаточно доходчиво. конечно, облегчило бы задачу название функции, которой можно компы в сети получить. впрочем найду - МСДН для меня дом родной! спасибо!
Я уже добился того, что с помощью NetServerEnum нахожу все машины в домене. Далее, NetShareEnum находит расшаренные папки, а FindFirstFileEx и FindNextFile сканят саму папку. Но ведь мне нужен список всех компов во всей сети а не в моем домене! Я пытался с параметрами NetServerEnum поиграться, но пока ничего не вышло :-( Есть еще идеи?
Во всей сети ето как, локалка или ты хочеш всю глобалку просканить ?? )) В NetServerEnum есть поле Domain у тебя наверное оно NULL, если нада по всем групам тогда получи список груп, а далее так как делаеш. Ты с ним тоже игрался ? Я когда-то тоже таким страдал ... посмотрю может сурсы остались. У меня были фичи типа сканить все групы или рeндж айпишек.
Сурса нет ... Но помню я там юзал WNetOpenEnum , WNetEnumResource ... Можеш порыться в мсдн по данным функциям ...
В Дельфях я не очень - самое общее только... врочем, разберусь. подкинули мне идейку сканить весь диапазон IP адресов. вот только опять же, какой набор функций использовать и каков общий алгоритм??? у нас локалка с доменами. на моем домене около десятка компов. доменов штук 30 и в каждом тоже по 5-20 компов. так вот, список только моего домена вылетает, хотя если я забиваю имя другого компа из другого домена - прога его нормально находит и исправно показывает список его шар (это я к тому, что менял NULL на имя компа из другого домена)...
Можеш пинговать (если впадло самому писать модуль для пинга найди в инете ... codeproject), можеш коннектиться на системний порт (135 , ...) (winsock!connect и т.д.), если удачно тогда получаеш имя компа (или по IP), а далее как в предыдущий раз.
вот кусок, разобраться можно Код (Text): ;--- vzt_net_res proc nom:DWORD, lpnetres:DWORD, vhod:DWORD Local h_ntr_1_lc:DWORD, sc_ntr_lc, razmer_ntr_1_lc Local m10:strukt_memory Local tx1_lc[256]:byte Local tx2_lc[256]:byte Local nr_lc:NETRESOURCE Local tx3_lc[256]:byte Local tx4_lc[256]:byte pushad inc [uroven] invoke fill_memory, ADDR m10, SIZEOF strukt_memory, 0 invoke WNetOpenEnum, RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpnetres, ADDR h_ntr_1_lc .if eax!=NO_ERROR clc jmp @@100 .endif mov eax, 0FFFFFFFFh mov [sc_ntr_lc], eax mov [razmer_ntr_1_lc], 32768 invoke create_memory, ADDR m10, 32768 invoke WNetEnumResource, [h_ntr_1_lc], ADDR sc_ntr_lc, [m10.mem], ADDR razmer_ntr_1_lc .if eax!=NO_ERROR clc jmp @@100 .endif obman_win mov eax, [m10.mem] mov ecx, [sc_ntr_lc] CP ecx, 0, Z, @@50 @@1: test [eax+NETRESOURCE.dwUsage], RESOURCEUSAGE_CONTAINER jz @@5 invoke Baze_add_str, nom invoke set_struk_iz_bz_y, nom, [n_obr_row], eax .if [vhod]!=0 invoke vzt_net_res, nom, eax, vhod .endif @@5: @@20: add eax, SIZEOF NETRESOURCE dnz ecx, @@1 @@50: @@kon: stc @@100: pushfd invoke WNetCloseEnum, [h_ntr_1_lc] invoke close_memory, ADDR m10 dec [uroven] popfd popad ret vzt_net_res endp
yureckor спасибо, как раз перед тем как сегодня заглянуть в инет я нашел пример реализации именно этого алгоритма с использованием семейства функций WNet в MSDN July 2004. впрочем, там остаются у меня частные вопросики по использованию структуры. сегодня надеюсь добить. но я обязательно проверю вариант с пингом...