Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prakt-Storozhok.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.98 Mб
Скачать

2. Задание по практическому занятию

Для демонстрации работы протокола NetBIOS приведено приложение, которое выполняет следующие действия:

  1. получает список сетевых адаптеров, установленных на компьютере;

  2. выводит информацию о данных адаптерах на экран. В качестве информации, выводимой на экран, выбирается следующая: аппаратный адрес сетевого адаптера (МАС-адрес), максимальный размер датаграммы, максимальный размер пакета NetBIOS, тайм-аут и число имен в локальной таблице имен NetBIOS.

Для реализации приложения необходимо:

1) Создать приложение, имеющее вид, изображенный на рис. 1.

Рис. 1

На форме расположены компоненты, перечисленные в табл.1.

2) В блок uses добавьте файл «nb.30.pas».

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, nb30;.

Таблица 1

Компоненты приложения

Компонент

Класс

Описание

Label1

ТLabel

Метка «NetBIOS» информация

Button1

TButton

Командная кнопка “Получить информацию”

Memo1

TMemo

Многосгрочное поле ввода-вывода

3) В начало программного модуля добавьте процедуру GetAdapterInfo для получения информации о сетевом адаптере. С помощью процедуры для каждого найденного сетевого «устройства проводится получение информации при помощи команды NCD_ADPSTAT.

Implementation

{$R*.dfin}

procedure GetAdapteiinfo(Lana: Char);

var

Adapter: TAdapterStalus;

NCB: TNCB;

res: string;

begin

FillChar(NCB, SizeOf(NCB), 0):

{Обнуление LANA. В NetBIOS, прежде чем использовать любой

LANA, его надо обнулить. Для этого вызывается процедура NbReset, в

которой выполняется NetBIOS-команда NCBRESET}

NCB.ncb_command := Char(NCBRESET);

NCB.ncb_Iana_num := Lana;

If NetBios(@NCB)<>Char(NRC GOODRET) then

begin

Forml.Memol.Lines.Add('MAC не найден'):

Exit;

end;

//Получеиие информации об адаптере

FillChar(NCB, SizeOf(NCB), 0);

NCB.ncb_command := char(NCBASTAT);

NCB.ncb_lana_num := Lana;

NCB.ncb_callname:= '*';

FillChar(Adapler, SizeOf( Adapter), 0);

NCB.ncb_buffer:= @Adapter;

NCB.ncb_length := SizeOf(Adapter);

If NetBios(@NCB)<>Char(NRC_GOODRET) then

begin

Forml.Memol.Lines.Add('MAC не найден.');

Exit;

end:

// Формирование аппаратного адреса для вывода на экран

res :=

IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[5]), 2) + '-' +

Form1.Memol.Lines.Add('Обнаружен адаптер:' + res);

Form1.Memol.Lines.Add ('Макс. размер датаграмм: ' +

IntToStr(Adapter.max_dgram_size)+'байт');

Form1.Memol.Lines.Add ('Maкс. размер пакета сессии:'+

IntToStr ( Adapter.max_sеss_pkt _sizе));

Form1.Memol.Lines.Add(' Число имен в локальной таблице: '+

IntToStr(Adapier.name_count);

Form1.Memol.Lines.Add('Taйм-ayт:' IntToStr(Adapter.ti_timeouts));

Form1.Memol.Lines.Add ('_________________________________');

end;.

4) Добавьте процедуру GetMACAddrеss для получения информации сетевых адаптерах. Так как эта процедура вызывает процедуру GetAdapterInfo, следовательно, процедура GelMACAddress должна располагаться в программном модуле после процедуры GetAdapterInfo.

Процедура GetMACAddrеss получает список сетевых адаптеров вызывает процедуру GetAdapterInfo для вывода на экран информации об очередном сетевом адаптере.

Для получения списка всех доступных в компьютере сетевых устройств используется функция NbLanaEnum, которой соответствует NetBIOS-команда NCB_ЕNUM.

procedure GetMACAddress();

var

AdapterList: TLanaEnum;

NOB: TNCB;

i: byte;

begin

FillChar(NCB, SizeOf(NCB), 0);

//Определение доступных сетевых устройств

//Заполнение структура NCB

NCB.ncb_command := Char(NCBENUM);

NCB.ncb_buffer := @AdapterList;

NCB.ncb_length := SizeOf(AdapterList);

Netbios(@NCB);

for i := 0 to Byte(AdapterList.length)-1 do

GetAdapterInfo(AdapterList.lana[i]);

If Byte(AdapterList.length)<0 then

Form1.Memo1.Lines.Add('MAC адрес не найден.');

end;.

  1. Событием OnClick кнопки «Получить информацию» является вызов Процедуры получения информации о сетевых адаптерах.

  1. Откомпилируйте созданное приложение и проверьте его работу.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. На каких уровнях семиуровневой модели OSI функционирует протокол NetBIOS?

  1. Будет ли протокол NetBIOS передавать данные между двумя компьютерами, если на одном из них установлен транспортный протокол IР, а на другом IPX?

  2. Для каких целей используется структура NCB?

  3. Назначение основных полей структуры NCB.

ЛИТЕРАТУРА

1. Джонс Э., Оланд Дж. Программирование в сетях Miсrosoft Windows. Мастер-класс /Пер. с англ. M., Издательско-торговый дом «Русская редакция», 2002. 608 с.

2. Фленов М. В. Программирование в Delphi глазами хакера. СПб., БХВ-Петербур, 2005. 368 с.

3. Фролов А. В.. Фролов Г. В. Локальные сети персональных компьютеров. Использование протоколов IPX, SPX и NetBIOS. М., ДИАЛОГ­АМ. 1993. 160 с.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]