- •«Дальневосточный федеральный университет»
- •Школа естественных наук материалы практических занятий
- •Определение установок сетевого адаптера
- •2.3. Определение сетевого адреса и маски сети
- •Разграничение доступа к сетевым ресурсам
- •2.5. Проверка сетевого соединения в tcp/ip - сетях.
- •1. Теоретическое введение
- •Имена почтовых ящиков.
- •1.2. Сервер почтовых ящиков
- •1.3 Пример создания сервера почтовых ящиков
- •1.4. Клиент почтовых ящиков
- •1.5 Создания клиента почтовых ящиков
- •2. Задание по практическому занятию
- •2.1. Создание серверного приложения
- •1. Теоретическое введение
- •1.2. Процедуры и функции Win32 для работы с файлами
- •1.2.1. Создание или открытие файла
- •1.2.2. Запись в файл
- •1.2.3. Чтение из файла
- •1.2.4. Закрытие файла
- •1.3. Пример программы, использующей функции Win32 для доступа к файлам и каталогам
- •1.4. Функции Delphi для работы с файлами
- •1.4.1. Открытие и закрытие файла
- •1.4.2. Типы файлов
- •1.4.3. Обработка ошибок при работе с файлами в Delphi
- •1.5. Пример программы, использующей функции Delphi для доступа к файлам и каталогам
- •2. Задание по лабораторной работе
- •1. Теоретическое введение
- •Пример создания сервера именованных каналов, работающего в блокирующем режиме
- •Пример создания клиента именованных каналов
- •Задание по практическому занятию
- •Создание серверного приложения,
- •Создание клиентского приложения,
- •2.3. Расширение возможностей именованных каналов
- •1. Теоретическое введение
- •1.1. Особенности организации работы именованных
- •2. Задание по практическому занятию
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •Занятие 6. Поиск доступных сетевых ресурсов
- •1. Теоретическое введение
- •Алгоритм поиска сетевых ресурсов
- •1.2. Структуры и функции для работы с сетевыми ресурсами
- •2.Задание по практическому занятию
- •1. Теоретическое введение
- •1.1. Назначение протокола NetBios
- •1.2. Назначение протокола NetBeui
- •2. Задание по практическому занятию
- •Занятие 8. СокетыWindows. Создание клиент-серверного приложения работающего по протоколуUdp
- •1. Теоретическое введние
- •1.1. Сокеты windows
- •1.2. Функции winsock для протокола udp
- •1.2.1. Инициализация интерфейса сокетов
- •1.2.2. Создание сокета
- •1.2.3. Определение номера порта и ip-адреса, по которому сервер будет принимать данные
- •1.2.4. Передача данных
- •2. Задание по практическому занятию
- •2.2. Создание клиентского приложения
- •2.3. Реализация возможностей функций Winsock по передаче данных между различными компьютерами в сети
- •Занятие 9. Исследование возможностей использования сокетов windows для организации обмена информацией между клиентом и сервером по протоколу тср
- •1. Теоретическое введение
- •1.1. Функции Winsock для протокола tcp
- •1.1.1. Установление соединения
- •1.1.3. Блокирование выполнения программы до тех пор, пока не поступит запрос на установление соединения
- •1.1.4. Передача данных
- •1.1.5. Получение данных по сети
- •1.2. Алгоритм работы Winsock- приложения по протоколу tcp
- •2. Задание по лабораторной работе
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •2.3. Исследование возможностей функций Winsock по передаче данных между различными компьютерами в сети
- •Занятие 10. Исследование методов сканирования сети
- •1. Теоретическое введение
- •2.1. Создание многопоточного приложения для сканирования сети
- •2.2. Исследование различных методов сканирования сети
- •Занятие 11. Применение сокетного соединения для обеспечения сетевого взаимодействия клиента и сервера
- •1. Теоретическое введение
- •1.1. Компоненты Delphi, инкапсулирующие сокеты
- •1.2. Компоненты Delphi tcpserver и tcpcl1ent
- •1.2.1. Установление соединения
- •1.2.2. Синхронизация сокетов
- •1.2.3. Класс TserverWinsocket
- •1.2.4. Компонент TserverSocket
- •1.2.5. Класс tClientWinsocket
- •1.2.6. Компонент tClientSocket
- •2. Задание по практическому занятию
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •1. Задание по лабораторной работе
- •1.1. Создание серверного приложения
- •1.2. Создание клиентского приложения
- •1.3. Исследование возможностей сервер-приложения
- •1. Теоретическое введение
- •2. Задание по практическому занятию
- •Занятие 14. Исследование возможностей поддержки протокола тср
- •1. Теоретическое введение
- •1.1. Методы indy-компонента- IdTcpClient
- •1.2. Методы indy-компонента - IdTcpServer
- •2. Задание по лабораторной работе
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •Занятие 15. Программирование клиентских приложений для работы с серверами internet
- •1. Теоретическое введение
- •Библиотека WinInet
- •1.2. Функции библиотеки wininet
- •1.2.1. Функция создания сеанса связи InternetOpen
- •1.2.2. Функция установления url-соединения InternetOpenUrl
- •1.2.3. Функция чтения файла, находящегося на web-cepвepe InternetReadFile
- •1.2.4. Функция закрытия дескриптора – InternetCloscHandle
- •1.2.5. Функция установления соединения InternetConnect
- •1.2.6. Функция «Найти первое вхождение файла с указанным групповым именем» FtpFindFirstFile
- •1.2.7. Функция «Найти следующие вхождения файла с указанным групповым именем» InternetFindNextFile
- •1.2.8. Функция «Получить имя текущего Каталога на ftp-сервере» -FtpGetCurrentDirectory
- •1.2.9. Функция чтения файла с http-сервера FtpGetFile
- •2. Задание по практическому занятию
- •2.1. Создание клиентского приложения.
- •Занятие 16. Приём и передача файлов по сети с использованием протокола tftp
- •1. Теоретическое введение
- •1.1. Протокол tftp
- •1.2. Компонент- idTrivialFtp
- •Компонент IdTrivialFtpServer
- •2. Задание по практическому занятию
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •Занятие 17. Создание http- клиента
- •1. Теоретическое введение
- •1.1. Свойства и методы компонента IdHttp
- •1.1.1. Метод get
- •1.1.2. Метод trace
- •1.1.3. Метод put
- •2. Задание по практическому занятию
- •2.1. Создание http-клиента
- •4. Как изменить приложение таким образом, чтобы файл с сервера записывался не в поле Memo, а в какой-либо файл на компьютере клиента? Каким должен быть тип переменной s в данном случае?
- •Тексты заданий самостоятельной работы задание № 1 создание web-браузера
- •1. Теоретическое введение
- •2. Задание по практическому занятию
- •Задание № 2 исследование telnet-клиента
- •1. Теоретическое введение
- •2. Задание по практическому занятию
- •2.1. Создание приложения Telnet-клиента
- •2.2. Исследование Telnet-клиента
- •Задание №3 разработка cgi-программ
- •1. Теоретическое введение
- •1.1. Принцип работы cgi-программ
- •1.2. Описание тега form
- •1.2.1. Тег input
- •1.2.2. Тег select
- •1.2.3. Тег textarea
- •13. Подтверждение и посылка запроса cgi-программе
- •2. Задание по практическому занятию
- •2.1. Создание простейшего серверного приложения
- •2.2. Передача cgi-приложению параметров, введенных пользователем, и получение дополнительной информации из переменных окружения
- •Задание № 4 разработка web-приложения
- •1. Теоретическое введение
- •1.1. Общее описание компонента twebmodule
- •1.2. Параметр request
- •1.3. Параметр response
- •1.4. События twebmodule
- •2. Задание по практическому занятию
- •2.1. Создание web-приложения с помощью компонента Delphi -webmodule
2.Задание по практическому занятию
Разработать приложение, выполняющее поиск доступных сетевых ресурсов. Приложение имеет вид, изображённый на рис.1 Порядок разработки приложения следующий
1.Создайте проект и перенесите на него компоненты, перечисленные в табл.1.
Таблица 1
Компонент |
Класс |
Описание |
Label1 |
TLabel |
Метка «UNC-имя компьютера» |
Edit1 |
TEdit |
Окно ввода UNC-имени компьютера |
Memo1 |
TMemo |
Окно вывода информации о доступных сетевых ресурсах |
Button1 |
TButton |
Командная кнопка «Просканировать» |
Рис 1
2. Для события OnClick командной кнопки «ПРОСКАНИРОВАТЬ» запишите следующий программный код:
procedure TForml.ButtonlClick(Sender: TObject);
var
hNetEnum: THandle;
NetContainerToOpen: NETRESOURCE;
ResourceBuffer: array[1..2000] of TNetResource;
i,ResourceBuf,EntriesToGet: DWORD;
begin
//Заполнение структуры NETRESOURCE
NetContainerToOpen. dwScope: =RESOURCE__GLOBALNET;
NetContainerToOpen. dwType: =RESOURCETYPE__ANY;
NetContainerToOpen.ipLocalName:=nil;
NetContainerToOpen.lpRemoteName:= PChar('\\'+Edit1.Text);
NetContainerToOpen.lpProvider:= ni1;
//Открытие процесса сканирования
WNetOpenEnum (RESOURCE__GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONNECTABLE or RESOURCEUSAGE_CONTAINER,
@NetContainerToOpen, hNetEnum);
//сканирование сетевых ресурсов
ResourceBuf := sizeof(ResourceBuffer);
EntriesToGet := 2000;
if (NO_ERROR <> WNetEnumResource(hNetEnura, EntriesToGet,
@ResourceBuffer, ResourceBuf)) then exit;
//Вывод на экран найденных ресурсов
for i := 1 to EntriesToGet do
Memol.Lines.Add(string(ResourceBuffer[i].lpRemoteName));
end;.
ДОПОЛНИТЕЛЬНОЕ ЗАДАНИЕ
Требуется создать структуру «сетевое окружение», для чего необходимо выполнить следующие действия.
Создайте форму, изображенную на рис.2.
Нанесите на форму компоненты, приведенные в таблице 2.
В разделе public объявите используемые в программе дополнительные процедуры и функции:
public
procedure EnumNet(const ParentNode: TTreeNode;
ResScope, ResType: DWORD;
const NetContainerToOpen: PNetResource);
function OpenEnum(const NetContainerToOpen: PNetResource;
ResScope, ResType, ResUsage: DWORD): THandle;
function EnumResources(const ParentNode: TTreeNode;
ResScope, ResType, ResUsage: DWORD;
hNetEnum: THandle): UINT;
end;
Рис.2.
Таблица 2
Компонент |
Класс |
Описание |
Label1 |
TLabel |
Где ищем |
Label2 |
TLabel |
Что ищем |
RadioButton1 |
TRadioButton |
Подключенные |
RadioButton2 |
TRadioButton |
Глобальные |
RadioButton3 |
TRadioButton |
Запомненные |
CBTypeAny |
TCheckBox |
Все |
CBTypeDisk |
TCheckBox |
Сетевые диски |
CBTypePrint |
TCheckBox |
Сетевые принтеры |
TreeTreeRes |
TTreeView |
Окно вывода информации о ресурсах |
Button1 |
TBitBtn |
Обновить |
В обработчике события OnClick кнопки «Обновить» запишите следующий программный код:
procedure TForm1.Button1Click(Sender: TObject);
var
ResScope,
ResType:DWORD;
Begin
// Очистка компонента TTreeView от текущих данных
TreeTreeRes.Items.Clear;
// Проверка, какой компонент RadioButton выбран
if RadioButton2.Checked then
ResScope := RESOURCE_GLOBALNET
else
if RadioButton1.Checked then
ResScope := RESOURCE_CONNECTED
else
ResScope := RESOURCE_REMEMBERED;
// Проверкатого, что нужно искать
ResType := 0;
if CBTypeAny.Checked then
ResType := ResType or RESOURCETYPE_ANY;
if CBTypeDisk.Checked then
ResType := ResType or RESOURCETYPE_DISK;
if CBTypePrint.Checked then
ResType := ResType or RESOURCETYPE_PRINT;
// Запуск процедуры поиска
EnumNet(TreeTreeRes.Items.Add(NIL, 'Сетевое окружение'), ResScope, ResType, NIL);
end;
Дополнительная процедура EnumNet имеет следующие параметры:
ParentNode – родительский объект в дереве TreeView, к которому будут доьавляться имена найденных ресурсов
ResScope – указание, где надо будет искать ресурсы (глобальные, подключенные или запомненные)
ResType – тип ресурсов, которые надо искать (все, принтеры, диски)
NetContainerToOpen –переменная, используется при перечислении
Добавьте к тексту программы описание функции EnumNet:
procedure TForm1.EnumNet(const ParentNode: TTreeNode; ResScope, ResType: DWORD; const NetContainerToOpen: PNetResource);
var
hNetEnum: THandle;
begin
// Инициализировать операцию поиска ресурсов
hNetEnum := OpenEnum(NetContainerToOpen, ResScope, ResType, RESOURCEUSAGE_CONNECTABLE or RESOURCEUSAGE_CONTAINER);
// Если поиск ресурсов невозможно запустить, то выход
if (hNetEnum = 0) then exit;
// Функция поиска ресурсов
EnumResources(ParentNode, ResScope, ResType, RESOURCEUSAGE_CONNECTABLE or RESOURCEUSAGE_CONTAINER, hNetEnum);
// Закрыть перечисление ресурсов
if (NO_ERROR <> WNetCloseEnum(hNetEnum)) then
ShowMessage('WNetCloseEnum Error');
end;
Добавьте к тексту программы описание функции OpenEnum, которая инициализирует операцию поиска.
function TForm1.OpenEnum(const NetContainerToOpen: PNetResource;
ResScope, ResType, ResUsage: DWORD): THandle;
var
hNetEnum: THandle;
begin
Result := 0;
if (NO_ERROR <> WNetOpenEnum(ResScope, ResType, RESOURCEUSAGE_CONNECTABLE or RESOURCEUSAGE_CONTAINER,
NetContainerToOpen, hNetEnum)) then
showmessage('Ошибка')
else
Result := hNetEnum;
end;
Функция OpenEnum запускает системную функцию WNetOpenEnum и проверяет результат выполнения данной функции.
Системная функция WNetOpenEnum рассматривалась в предыдущей работе
Структура NETRESOURCE рассматривалась в предыдущей работе.
Добавьте к тексту программы описание функции EnumResources, которая выполняет поиск ресурсов:
function TForm1.EnumResources(const ParentNode: TTreeNode;
ResScope, ResType, ResUsage: DWORD;
hNetEnum: THandle): UINT;
function ShowResource(const ParentNode: TTreeNode; Res: TNetResource): TTreeNode;
var
Str:String;
index:Integer;
begin
Result:=ParentNode;
if Res.lpRemoteName=nil then exit;
Str:=string(Res.lpRemoteName);
index:=Pos('\',Str);
While index>0 do
begin
Str:=Copy(Str,index+1,Length(Str));
index:=Pos('\',Str);
end;
Result := TreeTreeRes.Items.AddChild(ParentNode, Str);
end;
var
ResourceBuffer: array[1..2000] of TNetResource;
i,ResourceBuf,EntriesToGet: DWORD;
NewNode: TTreeNode;
begin
Result := 0;
while TRUE do
begin
ResourceBuf := sizeof(ResourceBuffer);
EntriesToGet := 2000;
// Системная функция поиска ресурсов
if (NO_ERROR <> WNetEnumResource(hNetEnum,EntriesToGet,@ResourceBuffer,ResourceBuf)) then
begin
case GetLastError() of
NO_ERROR: break;
ERROR_NO_MORE_ITEMS: exit;
else
ShowMessage('Ошибка');
Result := 1;
exit;
end;
end;
// рекурсивный поиск нового ресурса.
for i := 1 to EntriesToGet do
begin
NewNode := ShowResource(ParentNode, ResourceBuffer[i]);
if (ResourceBuffer[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
EnumNet(NewNode, ResScope, ResType, @ResourceBuffer[i]);
end;
end;
end;
В функции EnumResources основной является системная функция WNetEnumResource, которая перечисляет ресурсы сетевых объектов. Это функция рассматривалась в предыдущей работе.
Откомпилируйте созданное приложение и проверьте его работу.
ЛИТЕРАТУРА
Фленов М. Е. Программирование в Delphi глазами хакера. СПб., БХВ-Петербург, 2005. 368 с.
КОНТРОЛЬНЫЕ ВОПРОСЫ
Опишите алгоритм поиска свободных ресурсов.
Опишите назначение полей структуры NETRESOURSE.
Для каких целей используются функция WNetOpenEnum?
Для каких целей используются функция WNetEnumRESOURСE?
Как в программе определить, что поиск ресурсов завершён?
Занятие 7. Освоение методов работы с протоколом NETBIOS
NetBIOS (Network Basic input Output System, базовая система сетевого ввода-вывода) это стандартный интерфейс прикладного программирования, то есть это набор API-функций для работы с сетью (хотя весь NetBIOS состоит только из одной функции). Протокол NetBIOS был разработан в 1983 году компанией Sytek Corporation специально для IBM.
Система NetBIOS определяет только программную часть передачи данных т. е. как должна работать, программа для передачи данных по сети. NetBIOS расположен на уровнях сеанса, представлении и приложения.
Цель работ: получить практику в программировании и освоить структуру протокола NetBIOS.
