Сканування мережі у пошуку доступних ресурсів
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Ви знаєте що таке розширені ресурси? Це будь-які ресурси комп'ютера (директорії, диски або принтери), до яких відкритий вільний доступ із мережі. Якщо комп'ютер підключено до локальної мережі, для обміну файлами найчастіше роблять доступними (розшарюють) якийсь диск чи папку. Ну а якщо комп'ютер має ще й вихід в Інтернет, то до цих ресурсів можна пробратися з будь-якої точки Землі, якщо не вжито запобіжних заходів.
На формі нам знадобиться один компонент TEdit (у властивості name вкажіть AddressEdit) і один тмето (тут у властивості name залишимо значення за замовчуванням Memol). Компоненти потрібно належним чином оформити та додати кнопочку Просканувати. На рис. 4.25 Ви можете побачити мій варіант форми.

Мал. 4.25. Форма майбутньої програми
Тепер нам потрібно створити обробник події onclick кнопки і написати в ньому наступне (листинг 4.3).
Якщо вам листинг зрозумілий, можете закінчувати читання цього розділу. Ну а якщо у вас виникли проблеми, то розберемо його докладніше.
На самому початку відбувається заповнення структури NetcontainerToOpen, яка оголошена в розділі var як така, що належить типу netresource. У неї потрібно заповнити п'ять полів.
1. dwScope - у цьому параметрі потрібно вказати рамки ресурсів, що перераховуються. Я вказав resource_globalnet, щоб пошук відбувався в мережі.
2. dwType - тут вказується тип ресурсів, що перераховуються. Ви можете вказати resourcetypejdisk для дисків, resqurcetype_print для принтерів і resourcetype_any для всього підряду.
3. lpLocalMame – цей параметр потрібно обнулити.
5. IpProvider – ім'я власника ресурсу. Якщо воно не відоме, то потрібно вказатиnil.
Після заповнення структури необхідно відкрити процес сканування. Для цього існує функція WNetOpenEnum із наступними п'ятьма параметрами.
1. Область сканування. Тут знову вказуємо resolirce_globalnet.
2. Тип ресурсів, що скануються. Знову вказуємо все поспіль -
3. Тут слід зазначити, які ресурси треба перераховувати. Якщо потрібно все поспіль, просто вкажіть о. Інші можливі значення:
CONNECTABLE - Підключаються, і RES0URCEUSAGE_container - Зберігаються.
4. Структура, що ми заповнили.
5. Змінна типу яка використовуватиметься надалі.
Після того як ми відкрили перелік, можна сміливо братися до його реалізації. Для цього запускається нескінченний цикл:
Усередині ЦИКЛУ П0СІОЯНЮ викликається фуНКЦІЯ WNetEnumResource. Якщо вона повертає помилку (результат не дорівнює no_error), то перерахування закривається за допомогою wnetcioseEnum, і ми входимо з процедури, тому що більше відкритих ресурсів немає. Функція WnetEnumResource має чотири параметри:
1. Тут потрібно вказати ту саму змінну, яку ми вказували в останньому параметрі при відкритті перерахування
2. Тут слід зазначити змінну, у якій зберігається кількість необхідних повернення ресурсів. У прикладі це змінна EntriesToGet, в якій записано число 2000. Після того, як функція виконається, в цій змінній буде не 2000, а реально відкритих ресурсів.
3. Тут має бути масив структур TNetResource. Його довжина має бути достатньою для зберігання поверненої інформації про відкриті ресурси. У лістингу запитується максимум 2 000 ресурсів, отже, Масив ПОВИНЕН СКЛАДАТИСЯ З 2 ТОВ Структур (ResourceBuffer : array[l..2OO0] of TNetResource;).
4. Розмір масиву, зазначеного у попередньомупараметр.
Функція WnetcioseEnum має лише один параметр, в якому ми повинні вказати ту ж змінну, що ми писали в останньому параметрі при
ВІДКРИПІЯ переліку WNetOpenEnum.
Усередині циклу додаємо в компонент рядок, що містить ім'я ресурсу. Ім'я отриманого відкритого ресурсу можна прочитати в змінній lpRemoteName структури ResourceBuf fer [і]. Єдине, що тут треба ПАМ'ЯТАТИ ResourceBuffer[і].lpRemoteName - ЦЕ не рядок, ГЮЕГОМУ ЦЕЙ параметр треба перетворити на рядок. Для цього використовується функція String.
Отже, сканер розшарованих ресурсів готовий, щоправда, він поки що сканує лише одну вказану машину. Через це використання цієї програми в бойових умовах неможливо. Але ж ніхто не заважає вам доповнити програму перебором, адже це не так вже й складно.

Мал. 4.26. Результат роботи програми
На компакт-диску директорії \Приклади\Глава 4\Scan share ви можете побачити приклад цієї програми.