Home

Page 222
Page 222
background image

Сеть на низком уровне

режиме, то ОС посылает запрос на соединение серверу и, не дожидаясь ре-
ального

 продолжает работать дальше как ни в чем не бывало.

Если мы шлем запрос на соединение в асинхронном режиме, то пока сервер

решает, какой прислать ответ, можно послать еще кучу подобных запросов

на соединение с другими портами. Потом нужно только подождать немного,
чтобы сервер успел обработать все наши запросы, и проверить результат.

Единственный недостаток асинхронности — надо самому проверять резуль-

тат работы функции connect. Но это не так уж и сложно, и вы убедитесь

в этом, когда увидите исходный код сканера.

Давайте теперь на пальцах прикинем, как же будет работать быстрый сканер:

1. Надо объявить кучу переменных типа

 а лучше объявить массив

таких переменных, например:

 array [0..39] of TSOCKET; //Массив из 40 сокетов

В этом примере я объявил 40 сокетов, значит, можно сканировать сразу
по 40 портов.

2. Инициализировать сетевую библиотеку.
3. Каждому сокету из массива назначить свой номер порта и выполнить

функцию connect. Первый сокет будет пытаться присоединиться к 1-му
порту, 2-й ко второму и так далее.

4. Добавить все сокеты в специальный контейнер сетевых событий.

5. Запустить ожидание события.

6. Если произойдет какое-нибудь событие, значит, произошел коннект.
7. Вывести информацию об открытых портах и закрыть все сокеты.

8. Можно перейти на первый шаг и запустить сканирование следующей

партии портов.

В этом случае скан происходит пачками по нескольку портов сразу без ис-

пользования каких-либо дополнительных потоков. Это позволяет не только
выиграть в скорости, но и сильно разгрузить систему, лишив ее проблем

с обработкой многих потоков.

Библиотека

 тоже может работать через события. Для этого нужно

создать объект-событие с помощью функции

 (). После

этого добавить к нему сокеты, от которых нужно ожидать события с помо-
щью ФУНКЦИИ

 События ОТ Любого

из указанных сокетов и можно работать дальше, а именно проверять резуль-

тат выполнения операции (в данном случае функции connect).

Мы же будем работать в асинхронном режиме, поэтому следить придется

самостоятельно. Поэтому можно добавить в объект-событие все наши соке-
ты, указать, что мы ждем события о соединении с сервером, и просто запус-

тить ожидание.


Copyright © 2020 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.