Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · web...

191
Методические указания Форма Ф СО ПГУ 7.18.2/05 Министерство образования и науки Республики Казахстан Павлодарский государственный университет им. С. Торайгырова Факультет физики, математики и информационных технологий Кафедра информатики и информационных систем МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ПРАКТИЧЕСКИМ ЗАНЯТИЯМ по дисциплине Новые информационные сететвые технологии

Upload: others

Post on 16-Apr-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Методические указания ФормаФ СО ПГУ 7.18.2/05

Министерство образования и науки Республики КазахстанПавлодарский государственный университет им. С. ТорайгыроваФакультет физики, математики и информационных технологий

Кафедра информатики и информационных систем

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ПРАКТИЧЕСКИМ ЗАНЯТИЯМ

по дисциплине

Новые информационные сететвые технологии

Page 2: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Павлодар

Методические указания ФормаФ СО ПГУ 7.18.2/05

УТВЕРЖДАЮДекан ФФМиИТ_____________Ж.К. Нурбекова«__»_______________2010 г.

Составитель: старший преподаватель Науман Ольга АлександровнаКафедра информатики и информационных систем

Методические указания к практическим занятиям

по дисциплине Новые информационные сетевые технологии

для студентов специальности 050703 – Информационные системы

Рекомендована на заседании кафедры от «      »                                      20____ г. Протокол №                .

Заведующий кафедрой________________ А.Ж. Асаинова «___»______________20___ г. (подпись) (дата)

Одобрена методическим советом ФФМиИТ«__»_________20___ г. Протокол №____.

Председатель МС                                                                               Ж.Г. Муканова (подпись)

2

Page 3: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Пояснительная записка

Целью изучения дисциплины является обучение студентов знаниям, умениям, навыкам, необходимым для освоения и использования новых средств компьютерных коммуникаций, как глобальные (Интернет) и локальные (Интранет) в дальнейшей деятельности в качестве специалиста в области информационных и телекоммуникационных технологий. Задача дисциплины заключается в обеспечении своевременной коррекции траектории профессионального становления специалистов — информатиков в соответствии с динамикой развития телекоммуникационных технологий.

В результате изучения дисциплины студенты должны знать:- современные методы информационного наполнения сетевых

систем;- современные методы оптимизации программ;- новые возможности системного программирования;- сетевые утилиты;- основы программирования сетевых приложений на низком

уровне.И уметь:- конструировать приложения для телекоммуникационных

систем; - овладеть навыками, необходимыми для работы в современном

информационном обществе, - использовать средства телекоммуникаций в профессиональной

деятельности.

3

Page 4: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Тема №2 Современные методы оптимизации программ

Цель: Исследовать на практике следующие вопросы:

1. Законы оптимизации программ. Объекты оптимизации. 2. Поиск слабых и медленных мест в программе. Слабые места

компьютера. 3. Оптимизация регулярно повторяющихся операции. Об

оптимизации редких операций. 4. Использование знаний о компьютере при оптимизации кода

программ. 5. Причины нестабильности исполняемого кода.

Задание1. Имеется следующий код программы с определенной

логикой:1. А:=А*2;2. Б:=1;3. Х:=Х+М[Б];4. Б:=Б+1;5. Если Б<100 то перейти на шаг 3.

1. Определить слабые места предложенного кода;2. Выявить возможности оптимизации кода.3. Ответьте на вопросы: Вопрос 1: Пусть вам на 1 час досталась карточка какого- то

нового провайдера. Заносить ее в программу дозвона не имеет смысла, потому что вы можете больше никогда не позвонить ему. Нужно ли для этого перенастраивать свой дозвонщик на нового провайдера.

Вопрос 2: Какие операции бессмысленно оптимизировать. Задание 2. Сформулировать задачи для демонстрации каждого

из законов оптимизации.

4

Page 5: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Тема №3 Новые возможности системного программирования

Цель: Исследовать на практике следующие вопросы:

1. Управление окнами. Окна произвольной формы. Вычислительная погрешность.

2. Режимы слияния областей: RGN_AN, RGN_COPY, RGN_DIFF, RGN_OR, RGN_XOR. Функция создания области по картинке.

3. Системные утилиты. Просмотр закрытых паролей. Неустранимая погрешность.

4. Код динамической библиотеки. Мониторинг исполняемых файлов.

5. Работа с файлами и директориями.

Задание 1. Создать модуль управления системным указателем Мышь.

unit Un1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}// Ограничение области перемещения манипулятора мышьprocedure TForm1.Button1Click(Sender: TObject);var CR: Trect;

5

Page 6: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

beginCR:=Rect(250,250,400,400);// установка системного указателя мышки -OCR_ ...setSystemCursor(GetCursor,OCR_Icon);ClipCursor(@CR);end;end.

Задание2. Создать окно произвольной формы.

interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, jpeg;

type TForm1 = class(TForm) Image1: TImage; SpeedButton1: TSpeedButton; procedure FormCreate(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormPaint(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); private { Private declarations }// Dragging – параметр для перетаскивания, OldLeft,OldTop – первоначальные координаты окна Dragging : Boolean; OldLeft,OldTop: Integer; public { Public declarations } end;var Form1: TForm1;implementation

6

Page 7: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$R *.dfm}{ TForm1 }// Функция создания области на картинкеfunction CreateRgnFromBitmap(rgnBitmap: TBitmap): HRGN;var TransColor: TColor; i, j: Integer; i_width, i_height: Integer; i_left, i_right: Integer; rectRgn: HRGN;begin Result := 0;// запоминание размеров окна i_width := rgnBitmap.Width; i_height := rgnBitmap.Height;// определение прозрачного цвета transColor := rgnBitmap.Canvas.Pixels[0, 0];// цикл перебора строк картинки для определения области окна без фона for i := 0 to i_height - 1 do begin i_left := -1;// цикл перебора столбцов картинки для определения области окна без фона for j := 0 to i_width - 1 do begin if i_left < 0 then begin if rgnBitmap.Canvas.Pixels[j, i] <> transColor then i_left := j; end else if rgnBitmap.Canvas.Pixels[j, i] = transColor then begin i_right := j; rectRgn := CreateRectRgn(i_left, i, i_right, i + 1); if Result = 0 then Result := rectRgn else begin// Напоминаем режимы:

7

Page 8: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

RGN_AN – область перекрывания;RGN_COPY- копия первой областиRGN_DIFF- удаление второй из первой областиRGN_XOR – объединение областей, исключая все пересечения; //Функция для комбинирования (объединения) областей.CombineRgn(Result, Result, rectRgn, RGN_OR); DeleteObject(rectRgn); end; i_left := -1; end; end; if i_left >= 0 then begin rectRgn := CreateRectRgn(i_left, i, i_width, i + 1); if Result = 0 then Result := rectRgn else begin CombineRgn(Result, Result, rectRgn, RGN_OR); DeleteObject(rectRgn); end; end; end;end;

procedure TForm1.FormCreate(Sender: TObject);var WindowRgn: HRGN;begin BorderStyle := bsNone; ClientWidth := Image1.Picture.Bitmap.Width; ClientHeight := Image1.Picture.Bitmap.Height; windowRgn := CreateRgnFromBitmap(Image1.Picture.Bitmap); SetWindowRgn(Handle, WindowRgn, True);end;

procedure TForm1.FormPaint(Sender: TObject);begin Canvas.Draw(0, 0, Image1.Picture.Bitmap);end;

8

Page 9: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

procedure

TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin if button=mbLeft then begin Dragging := True; OldLeft := X; OldTop := Y; end;end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if Dragging then begin Left := Left+X-OldLeft; Top := Top+Y-OldTop; end;end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin Dragging := False;end;

9

Page 10: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

procedure TForm1.SpeedButton1Click(Sender: TObject);begin Close;end;

end.

Задание 3. Создать модуль для просмотра паролей.Примечание. Для выполнения задания потребуется недокументированная функция WnetEnumCachedPasswords, которая ищет пароли в кэше и возвращает их в процедуру, указанную в качестве четвертого параметра.unit Unit1;interfaceuses Windows, SysUtils, Classes, Forms, ShellAPI, Controls, StdCtrls;type TForm1 = class(TForm) ListBox: TListBox; procedure FormShow(Sender: TObject); private { Private declarations } public hMPR: THandle; end;

var Form1: TForm1;const Count: Integer = 0;function WNetEnumCachedPasswords(Имя функции lp: lpStr; // должен быть NILw: Word; // должен быть 0b: Byte; // должен быть $FFPC: PChar; // адрес функции, в которую вернутся паролиdw: Dword // должен быть 0): Word; stdcall;implementation{$R *.DFM}

10

Page 11: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// external mpr –имя динамической библиотеки, в котором находится эта функция , NetEnumCachedPasswords –имя функции в данной библиотекеfunction WNetEnumCachedPasswords (lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords';//объявление WinPassword –нестандартной структурыtype PWinPassword = ^TWinPassword; TWinPassword = record EntrySize: Word; ResourceSize: Word; PasswordSize: Word; EntryIndex: Byte; EntryType: Byte; PasswordC: Char; end;// WinPassword –нестандартная структура, которая объявляется пользователемfunction AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; stdcall;var Password: String; PC: Array[0..$FF] of Char;begin inc(Count);

Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize); PC[WinPassword.ResourceSize] := #0; CharToOem(PC, PC); Password := StrPas(PC);// в PasswordC будет находиться строка, содержащая имя пользователя и пароль. ResourceSize –размер пароля. Пароль хранится в DOC кодировке. Для того, чтобы его увидеть , надо его перевести windows-кодировку с помощью функции CharToOem(PC, PC), где первый параметр – указывает что надо перекодировать, а второй – результат перекодировки. Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + WinPassword. ResourceSize); Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize);

11

Page 12: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

PC[WinPassword.PasswordSize] := #0; CharToOem(PC, PC); Password := Password + ': ' + StrPas(PC);

Form1.ListBox.Items.Add(Password); Result := True;end;procedure TForm1.FormShow(Sender: TObject);begin if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then begin Application.MessageBox('А не могу я прочитать пароли.', 'Error', mb_Ok or mb_IconWarning); Application.Terminate; end else if Count = 0 then ListBox.Items.Add('Пароля нету');end;end.

Задание 4. Разработать модуль, имитирующую работу проводника операционной системы с файлами и директориями:

unit Unit1;

interface

uses Windows, Messages,

SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, ShellCtrls, ShellAPI, StdCtrls, ExtCtrls, FileCtrl,

StandardDialogs;// ShellAPI – для функции SHFileOperation, FileCtrl – для функции

SelectDirectory

type TForm1 = class(TForm) ShellTreeView1: TShellTreeView;

12

Page 13: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

ShellListView1: TShellListView; Panel1: TPanel; CopyButton: TButton; MoveButton: TButton; DelButton: TButton; PropertiesButton: TButton; procedure CopyButtonClick(Sender: TObject); procedure MoveButtonClick(Sender: TObject); procedure DelButtonClick(Sender: TObject); procedure PropertiesButtonClick(Sender: TObject); private { Private declarations }// Функция для копирования, перемещения и удаления файла// Ctrl+Shift+C function DoSHFileOp(Handle: THandle; OpMode: UInt; Src, Dest: string; DelRicleBin: Boolean): Boolean; public { Public declarations } end;var Form1: TForm1;Const// Объявление массива из 4-х значений FO_COPY -копирования,

FO_DELETE - удаления, FO_MOVE - перемещения, FO_RENAME - переименования

FileOpMode: array[0..3] of UInt = (FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME);

implementation{$R *.dfm}{ TForm1 }function TForm1.DoSHFileOp(Handle: THandle; OpMode: UInt; Src, Dest: string; DelRicleBin: Boolean): Boolean;var Ret: integer; ipFileOp: TSHFileOpStruct;begin Screen.Cursor:=crAppStart;// Заполнение структуры нулями, чтобы тем не оказалось ненужных

данных; FillChar(ipFileOp, SizeOf(ipFileOp), 0);

13

Page 14: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

with ipFileOp do begin// указатель на окно wnd := Handle;// опреация, которую надо выполнить wFunc := OpMode;// путь к источнику /3-й параметр pFrom := pChar(Src);// путь к приемнику /4-й парметр pTo := pChar(Dest);// Проверка флагов: Если истина, то в корзину для удаления

FOF_ALLOWUNDO, иначе не запрашивать создание директория FOF_NOCONFIRMMKDIR

if DelRicleBin then fFlags := FOF_ALLOWUNDO else fFlags := FOF_NOCONFIRMMKDIR; fAnyOperationsAborted := False; hNameMappings := nil; lpszProgressTitle := ''; end; try Ret := SHFileOperation(ipFileOp); except Ret := 1; end; result := (Ret = 0); Screen.Cursor:=crDefault;end;// Процедура копирования файлаprocedure TForm1.CopyButtonClick(Sender: TObject);var FSrc,FDes,FPath: string; i:Integer;begin FDes := '';// Проверка: выбран ли файл, если нет, то выход if ShellListView1.Selected=nil then exit;// выбор директория (появляется окно) if not SelectDirectory('Select Directory', '', FDes) then

14

Page 15: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

exit;

FPath:=ShellTreeView1.Path; if FPath[Length(FPath)]<>'\' then FPath:=FPath+'\'; FSrc := '';// проверка имени файла for i := 0 to ShellListView1.items.Count-1 do if (ShellListView1.items.item[i].Selected) then begin FSrc:=FSrc+ShellListView1.Folders[ShellListView1.Items.Item[I].Ind

ex].PathName+#0; ShellListView1.items.item[i].Selected:=false; end; FSrc:=FSrc+#0;// FSrc, Fdes –пути-источники (куда и откуда коировать),

FileOpMode[0] – копирование DoSHFileOp(Handle, FileOpMode[0], FSrc, FDes, false);end;

// Процедура перемещения файлаprocedure TForm1.MoveButtonClick(Sender: TObject);var FSrc,FDes,FPath: string; i:Integer;begin FDes := ''; if ShellListView1.Selected=nil then exit; if not SelectDirectory('Select Directory', '', FDes) then exit; FPath:=ShellTreeView1.Path; if FPath[Length(FPath)]<>'\' then FPath:=FPath+'\'; FSrc := ''; for i := 0 to ShellListView1.items.Count-1 do if (ShellListView1.items.item[i].Selected) then begin FSrc:=FSrc+ShellListView1.Folders[ShellListView1.Items.Item[I].Inde

x].PathName+#0; ShellListView1.items.item[i].Selected:=false;

15

Page 16: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

end; FSrc:=FSrc+#0; DoSHFileOp(Handle, FileOpMode[2], FSrc, FDes, false);end;// Процедура удаления файлаprocedure TForm1.DelButtonClick(Sender: TObject);var i: integer; DelFName: string;begin if ShellListView1.Selected=nil then exit;// Проверка нахождения файла в режиме редактирования, если

значение истинно, то выход if ShellListView1.isEditing then exit;

DelFName:=''; for i := 0 to ShellListView1.items.Count-1 do if (ShellListView1.items.item[i].Selected) then begin DelFName:=DelFName+ShellListView1.Folders[ShellListView1.Items

.Item[I].Index].PathName+#0; ShellListView1.items.item[i].Selected:=false; end;

DelFName:=DelFName+#0;

DoSHFileOp(Handle, FO_DELETE, DelFName, DelFName, false);end;// свойства файлаprocedure TForm1.PropertiesButtonClick(Sender: TObject);begin// проверка на выделение if ShellListView1.Selected=nil then exit;// Функция отображения окна свойств объекта SHObjectProperties(Handle, $02,

PWideChar(WideString(ShellListView1.Folders[ShellListView1.Selected.Index].PathName)), nil);

end;end.

16

Page 17: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Тема №4 Сетевое программирование: сетевые утилиты

Цель: Исследовать на практике следующие вопросы:1. Сетевые протоколы- протокол IP. 2. Сопоставление адреса ARP и RARP.3. Транспортные протоколы –протокол UDP.4. Протокол TCP. Прикладные протоколы NetBios.5. Протокол IPX/SPX. Сканер портов. Почтовые утилиты.

MS TCP/IP Справочная модель OSIУровень

приложенияСокеты

WindowsNetBIOS

NetBIOS на основе TCP/IP

Уровень приложения

Уровень представления

Интерфейс TDI Уровень сеансаУровень

транспортаUDP TCP Уровень

транспортаМежсетевой

уровеньICMP ARP

IPIGMP RARP

Уровень сети

Интерфейс NDISУровень сетевого

интерфейса

Internet

FDDI

Драйверы сетевых

карт

PPP

Трансляция пакета данных

Канальный уровень

Физический уровень

Сетевые карты

Рис.4.1. Модель OSI и вариант от MS

На рис. 4.1 графически сопоставлена модель MS TCP и справочная модель OSI. Слева указаны названия уровней по методу MS, а справа- уровни OSI. В центре указаны протоколы. Они размещены именно на том уровне, на котором они работают.

Задание 1. Исследовать работу сканирование. Создать модуль быстрого сканера портов.

17

Page 18: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, winsock2, ComCtrls;

type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; AddressEdit: TEdit; Label2: TLabel; StartPortEdit: TEdit; EndPortEdit: TEdit; Label3: TLabel; Button1: TButton; DisplayMemo: TRichEdit; ProgressBar1: TProgressBar; procedure Button1Click(Sender: TObject); private { Private declarations } function LookupName: TInAddr; public { Public declarations } end;

var Form1: TForm1;

implementation

{$R *.dfm}

//Функция преобразвывающся введённый адрес сервера в спецформат

18

Page 19: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

//Если введено символьное имя, то она преобразовывает его сначала в IP адрес,//а потом переводит в спец форматfunction TForm1.LookupName: TInAddr;var HostEnt: PHostEnt; InAddr: TInAddr;begin if Pos('.', AddressEdit.Text)>0 then InAddr.s_addr := inet_addr(PChar(AddressEdit.Text)) else begin HostEnt := gethostbyname(PChar(AddressEdit.Text)); FillChar(InAddr, SizeOf(InAddr), 0); if HostEnt <> nil then begin with InAddr, HostEnt^ do begin S_un_b.s_b1 := h_addr^[0]; S_un_b.s_b2 := h_addr^[1]; S_un_b.s_b3 := h_addr^[2]; S_un_b.s_b4 := h_addr^[3]; end; end end; Result := InAddr;end;

procedure TForm1.Button1Click(Sender: TObject);var i,j,s, opt, index: Integer; FSocket: array [0..41] of TSOCKET; //Массив сокетов busy : array [0..41] of boolean; //Массив, в котором будет храниться информация о каждом сканируемом сокете port : array [0..41] of integer; //Массив сканируемых портов addr : TSockAddr; hEvent : THandle; //Объект для обработки сетевых событий fset : TFDset; tv : TTimeval; tec :PServEnt; PName:String;

19

Page 20: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

GInitData : TWSADATA;begin // Устанавливаю максимальное и минимальное значение полоски состояния сканирования //Я устанавливаю в минимум начальный порт сканирования, а в максимум - конечный порт ProgressBar1.Min:=StrToInt(StartPortEdit.Text); ProgressBar1.Max:=StrToInt(EndPortEdit.Text);

//Инициализирую WinSock WSAStartup(MAKEWORD(2,0), GInitData);

//Записываю в переменную i значение начального порта i:=StrToInt(StartPortEdit.Text);

//Заполняю основные поля структуры addr, которая будет использоваться //при вызове функции connect addr.sin_family := AF_INET; addr.sin_addr.s_addr := INADDR_ANY;

//Вывожу сообщение о том, что начат поиск введённого хоста DisplayMemo.SelAttributes.Color:=clTeal; DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold]; DisplayMemo.Lines.Add('Поиск хоста');

//LookupName - эта функция написана выше и она возвращяет адрес в спец формате указанного сервера //Результат этой функции я записываю в поле адреса сервера структуры addr addr.sin_addr := LookupName;

//Вывожу сообщение о том, что начато сканирование DisplayMemo.SelAttributes.Color:=clTeal; DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold]; DisplayMemo.Lines.Add('Сканирование...');

//В index находиться количество сокетов проверяемых за один раз index:=40;

20

Page 21: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

//Создаю объект для обработки сетевых событий hEvent := WSACreateEvent(); while i<StrToInt(EndPortEdit.Text) do begin ///Всем элементам массива busy присваиваю значение false for j:=0 to index do busy[j]:=false;

//В этом цикле будут асинхронно посылаться запросы на моединение //переменная j будет изменяться от 0 до максимального количества //элементов в массиве for j:=0 to index do begin //Если j-й порт превысил значение указанного максимального //порта, то прервать цикл if i>StrToInt(EndPortEdit.Text) then begin index:=j-1; break; end;

//Инициализирую очередной j-й сокет из массива FSocket FSocket[j] := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

//Добавляю j-й сокет к объекту событий с помощью WSAEventSelect //1-й параметр - Добавляемый сокет //2-й параметр - объект событий, который был создан с помощью WSACreateEvent //3-й параметр - какие события ожидать. Тут я указываю FD_WRITE - события записи и FD_CONNECT - события о заключении соединения WSAEventSelect(FSocket[j], hEvent, FD_WRITE + FD_CONNECT);

//Указываем порт, на который надо произвести попытку соединения addr.sin_port := htons(i);

//Попытка коннекта на очередной порт

21

Page 22: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

connect(FSocket[j], @addr, sizeof(addr));

//Даём ОС поработать и обработать накопившиеся события. //Если этого не делать, то вовремя сканирования будет //происходить эффект зависания Application.ProcessMessages;

//Проверяю, были ли ошибки. if WSAGetLastError()=WSAEINPROGRESS then begin //Если ошибка произошла, то закрываю этот порт closesocket (FSocket[j]); //Устанавливаю соответствующий элемент в массиве busy в true //чтобы потом не проверять этот порт, потому что он всё равно //уже закрыт busy[j]:=true; end;

//Указываю в массиве port, на какой именно порт мы сейчас послали запрос port[j]:=i;

//Увеличиваю счётчик i в котором я отслеживаю, какой порт сейчас сканируеться //чтобы на следующем этапе цикла for запустить сканирование следующего порта i:=i+1; end;

//Обнуляю переменную fset FD_Zero(fset);

//Заполняю сканируемый массив сокетов в переменную fset for j := 0 to index do begin if busy[j] <> true then FD_SET (FSocket[j], fset); end;

//Даём ОС поработать и обработать накопившиеся события. Application.ProcessMessages;

22

Page 23: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

//Заполняю структуру, в которой указано время ожидания события от сокета tv.tv_sec := 1; //Мы будем ждать 1 секунду tv.tv_usec := 0;

//Ожидаем пока произойдёт хотя бы одно событие от любого из сокетов s:=select (1, nil, @fset, nil, @tv);

//Даём ОС поработать и обработать накопившиеся события. Application.ProcessMessages;

//Запускаю массив, в котором будет проверятся, какие из сокетов в массиве FSocket //прошли коннект успешно, а какие нет. for j := 0 to index do begin //Проверяем, был ли закрыт соответствующий порт из-за ошибки //Если да, то нет смысла его проверять if busy[j] then continue;

if FD_ISSET (FSocket[j], fset) then begin //В переменную s записываеться размер перменной Opt s:=Sizeof(Opt); opt:=1; //Получаю состояние текущего j-го сокета //результат состояния будет в переменной opt getsockopt(FSocket[j], SOL_SOCKET, SO_ERROR, @opt, s);

//Если opt равно 0 то порт открыт и к нему можно подключится if opt=0 then begin //Пытаюсь узнать символьное имя порта tec := getservbyport(htons(Port[j]),'TCP'); if tec=nil then PName:='Unknown' else begin PName:=tec.s_name;

23

Page 24: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

end; //Вывожу сообщение об открытом порте DisplayMemo.Lines.Add('Хост:'+AddressEdit.Text+': порт :'+IntToStr(Port[j])+' ('+Pname+') '+' открыт '); end; end; //Закрыть j-й сокет, потому что он больше уже не нужен closesocket(FSocket[j]); end; //Увеличивею позицию в ProgressBar1 ProgressBar1.Position:=i; end; //Закрываю объект событий WSACloseEvent(hEvent);

//Вывожу сообщение о конце сканирования DisplayMemo.SelAttributes.Color:=clTeal; DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold]; DisplayMemo.Lines.Add('Сканирование закончено...'); ProgressBar1.Position:=0;end;

end.

Тема № 5 Программирование сетевых приложений на низком уровне

Цель: Исследовать на практике следующие вопросы:1. Использование функции WINDOWS библиотеки WinSock.

Основные функции WinSock: инициализация и соединение. Аппроксимация.

2. Подключение заголовочных файлов. Получение информации о сокетах. Работа с адресами.

3. Получение информации о сетевом устройстве. Работа с NetBios.

4. Определение локального/ удаленного IP адреса. 5. Добавление и удаление ARP-записей. Работа с сетевыми

ресурсами.

24

Page 25: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

6. Частота и загрузка процессора. Получение информации об устройстве вывода: монитора.

7. Работа с типами файлов. Работа со сканером.

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, winSock;

type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);type

TaPInAddr = Array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr;var

25

Page 26: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

phe: PHostEnt; pptr: PaPInAddr; Buffer: Array[0..63] of Char; I: Integer; GInitData: TWSAData;begin WSAStartup($101, GInitData); GetHostName(Buffer, SizeOf(Buffer)); phe := GetHostByName(buffer); if phe = nil then Exit; pPtr := PaPInAddr(phe^.h_addr_list); I := 0; while pPtr^[I] <> nil do begin TEdit(FindComponent('Edit'+IntToStr(i+1))).Text:=inet_ntoa(pptr^[I]^); Inc(I); end; WSACleanup;end;

end.

Задание 3. Исследовать работу с ARP –таблицей. Добавление и удаление ARP-записей. Работа с сетевыми ресурсами.

unit IpRtrMib;{$ALIGN ON}

26

Page 27: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$Z4}interfaceuses Windows;//////////////////////////////////////////////////////////////////////////////// Included to get the value of MAX_INTERFACE_NAME_LEN //////////////////////////////////////////////////////////////////////////////// #include <mprapi.h>//////////////////////////////////////////////////////////////////////////////// Included to get the necessary constants ////////////////////////////////////////////////////////////////////////////////// #include <ipifcons.h>//////////////////////////////////////////////////////////////////////////////// This is the Id for IP Router Manager. The Router Manager handles //// MIB-II, Forwarding MIB and some enterprise specific information. //// Calls made with any other ID are passed on to the corresponding protocol // For example, an MprAdminMIBXXX call with a protocol ID of PID_IP and //// a routing Id of 0xD will be sent to the IP Router Manager and then //// forwarded to OSPF //// This lives in the same number space as the protocol Ids of RIP, OSPF //// etc, so any change made to it should be done keeping this in mind ////////////////////////////////////////////////////////////////////////////////const MAX_INTERFACE_NAME_LEN = 256; // MPRAPI.H {$EXTERNALSYM MAX_INTERFACE_NAME_LEN} IPRTRMGR_PID = 10000; {$EXTERNALSYM IPRTRMGR_PID} ANY_SIZE = 1; {$EXTERNALSYM ANY_SIZE}//////////////////////////////////////////////////////////////////////////////// The following #defines are the Ids of the MIB variables made accessible //// to the user via MprAdminMIBXXX Apis. It will be noticed that these are //// not the same as RFC 1213, since the MprAdminMIBXXX APIs work on rows and //// groups instead of scalar variables ////////////////////////////////////////////////////////////////////////////////

27

Page 28: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

IF_NUMBER = 0; {$EXTERNALSYM IF_NUMBER} IF_TABLE = IF_NUMBER + 1; {$EXTERNALSYM IF_TABLE} IF_ROW = IF_TABLE + 1; {$EXTERNALSYM IF_ROW} IP_STATS = IF_ROW + 1; {$EXTERNALSYM IP_STATS} IP_ADDRTABLE = IP_STATS + 1; {$EXTERNALSYM IP_ADDRTABLE} IP_ADDRROW = IP_ADDRTABLE + 1; {$EXTERNALSYM IP_ADDRROW} IP_FORWARDNUMBER = IP_ADDRROW + 1; {$EXTERNALSYM IP_FORWARDNUMBER} IP_FORWARDTABLE = IP_FORWARDNUMBER + 1; {$EXTERNALSYM IP_FORWARDTABLE} IP_FORWARDROW = IP_FORWARDTABLE + 1; {$EXTERNALSYM IP_FORWARDROW} IP_NETTABLE = IP_FORWARDROW + 1; {$EXTERNALSYM IP_NETTABLE} IP_NETROW = IP_NETTABLE + 1; {$EXTERNALSYM IP_NETROW} ICMP_STATS = IP_NETROW + 1; {$EXTERNALSYM ICMP_STATS} TCP_STATS = ICMP_STATS + 1; {$EXTERNALSYM TCP_STATS} TCP_TABLE = TCP_STATS + 1; {$EXTERNALSYM TCP_TABLE} TCP_ROW = TCP_TABLE + 1; {$EXTERNALSYM TCP_ROW} UDP_STATS = TCP_ROW + 1; {$EXTERNALSYM UDP_STATS} UDP_TABLE = UDP_STATS + 1; {$EXTERNALSYM UDP_TABLE} UDP_ROW = UDP_TABLE + 1; {$EXTERNALSYM UDP_ROW} MCAST_MFE = UDP_ROW + 1; {$EXTERNALSYM MCAST_MFE} MCAST_MFE_STATS = MCAST_MFE + 1; {$EXTERNALSYM MCAST_MFE_STATS}

28

Page 29: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

BEST_IF = MCAST_MFE_STATS + 1; {$EXTERNALSYM BEST_IF} BEST_ROUTE = BEST_IF + 1; {$EXTERNALSYM BEST_ROUTE} PROXY_ARP = BEST_ROUTE + 1; {$EXTERNALSYM PROXY_ARP} MCAST_IF_ENTRY = PROXY_ARP + 1; {$EXTERNALSYM MCAST_IF_ENTRY} MCAST_GLOBAL = MCAST_IF_ENTRY + 1; {$EXTERNALSYM MCAST_GLOBAL} IF_STATUS = MCAST_GLOBAL + 1; {$EXTERNALSYM IF_STATUS} MCAST_BOUNDARY = IF_STATUS + 1; {$EXTERNALSYM MCAST_BOUNDARY} MCAST_SCOPE = MCAST_BOUNDARY + 1; {$EXTERNALSYM MCAST_SCOPE} DEST_MATCHING = MCAST_SCOPE + 1; {$EXTERNALSYM DEST_MATCHING} DEST_LONGER = DEST_MATCHING + 1; {$EXTERNALSYM DEST_LONGER} DEST_SHORTER = DEST_LONGER + 1; {$EXTERNALSYM DEST_SHORTER} ROUTE_MATCHING = DEST_SHORTER + 1; {$EXTERNALSYM ROUTE_MATCHING} ROUTE_LONGER = ROUTE_MATCHING + 1; {$EXTERNALSYM ROUTE_LONGER} ROUTE_SHORTER = ROUTE_LONGER + 1; {$EXTERNALSYM ROUTE_SHORTER} ROUTE_STATE = ROUTE_SHORTER + 1; {$EXTERNALSYM ROUTE_STATE} NUMBER_OF_EXPORTED_VARIABLES = ROUTE_STATE + 1; {$EXTERNALSYM NUMBER_OF_EXPORTED_VARIABLES}//////////////////////////////////////////////////////////////////////////////// MIB_OPAQUE_QUERY is the structure filled in by the user to identify a //// MIB variable //// dwVarId ID of MIB Variable (One of the Ids #defined above) //// dwVarIndex Variable sized array containing the indices needed to //// identify a variable. NOTE: Unlike SNMP we dont require that //// a scalar variable be indexed by 0 ////////////////////////////////////////////////////////////////////////////////

29

Page 30: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

type PMIB_OPAQUE_QUERY = ^MIB_OPAQUE_QUERY; {$EXTERNALSYM PMIB_OPAQUE_QUERY} _MIB_OPAQUE_QUERY = record dwVarId: DWORD; rgdwVarIndex: array [0..ANY_SIZE - 1] of DWORD; end; {$EXTERNALSYM _MIB_OPAQUE_QUERY} MIB_OPAQUE_QUERY = _MIB_OPAQUE_QUERY; {$EXTERNALSYM MIB_OPAQUE_QUERY} TMibOpaqueQuery = MIB_OPAQUE_QUERY; PMibOpaqueQuery = PMIB_OPAQUE_QUERY;//////////////////////////////////////////////////////////////////////////////// The following are the structures which are filled in and returned to the //// user when a query is made, OR are filled in BY THE USER when a set is //// done ////////////////////////////////////////////////////////////////////////////////

type PMIB_IFNUMBER = ^MIB_IFNUMBER; {$EXTERNALSYM PMIB_IFNUMBER} _MIB_IFNUMBER = record dwValue: DWORD; end; {$EXTERNALSYM _MIB_IFNUMBER} MIB_IFNUMBER = _MIB_IFNUMBER; {$EXTERNALSYM MIB_IFNUMBER} TMibIfnumber = MIB_IFNUMBER; PMibIfnumber = PMIB_IFNUMBER;

const MAXLEN_IFDESCR = 256; {$EXTERNALSYM MAXLEN_IFDESCR} MAXLEN_PHYSADDR = 8; {$EXTERNALSYM MAXLEN_PHYSADDR}

type PMIB_IFROW = ^MIB_IFROW; {$EXTERNALSYM PMIB_IFROW}

30

Page 31: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

_MIB_IFROW = record wszName: array [0..MAX_INTERFACE_NAME_LEN - 1] of WCHAR; dwIndex: DWORD; dwType: DWORD; dwMtu: DWORD; dwSpeed: DWORD; dwPhysAddrLen: DWORD; bPhysAddr: array [0..MAXLEN_PHYSADDR - 1] of BYTE; dwAdminStatus: DWORD; dwOperStatus: DWORD; dwLastChange: DWORD; dwInOctets: DWORD; dwInUcastPkts: DWORD; dwInNUcastPkts: DWORD; dwInDiscards: DWORD; dwInErrors: DWORD; dwInUnknownProtos: DWORD; dwOutOctets: DWORD; dwOutUcastPkts: DWORD; dwOutNUcastPkts: DWORD; dwOutDiscards: DWORD; dwOutErrors: DWORD; dwOutQLen: DWORD; dwDescrLen: DWORD; bDescr: array[0..MAXLEN_IFDESCR - 1] of BYTE; end; {$EXTERNALSYM _MIB_IFROW} MIB_IFROW = _MIB_IFROW; {$EXTERNALSYM MIB_IFROW} TMibIfRow = MIB_IFROW; PMibIfRow = PMIB_IFROW;

PMIB_IFTABLE = ^MIB_IFTABLE; {$EXTERNALSYM PMIB_IFTABLE} _MIB_IFTABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IFROW; end; {$EXTERNALSYM _MIB_IFTABLE} MIB_IFTABLE = _MIB_IFTABLE; {$EXTERNALSYM MIB_IFTABLE}

31

Page 32: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

TMibIftable = MIB_IFTABLE; PMibIftable = PMIB_IFTABLE;

// #define SIZEOF_IFTABLE(X) (FIELD_OFFSET(MIB_IFTABLE,table[0]) + ((X) * sizeof(MIB_IFROW)) + ALIGN_SIZE)

type PMibIcmpStats = ^TMibIcmpStats; _MIBICMPSTATS = record dwMsgs: DWORD; dwErrors: DWORD; dwDestUnreachs: DWORD; dwTimeExcds: DWORD; dwParmProbs: DWORD; dwSrcQuenchs: DWORD; dwRedirects: DWORD; dwEchos: DWORD; dwEchoReps: DWORD; dwTimestamps: DWORD; dwTimestampReps: DWORD; dwAddrMasks: DWORD; dwAddrMaskReps: DWORD; end; {$EXTERNALSYM _MIBICMPSTATS} MIBICMPSTATS = _MIBICMPSTATS; {$EXTERNALSYM MIBICMPSTATS} TMibIcmpStats = _MIBICMPSTATS;

PMibIcmpInfo = ^TMibIcmpInfo; _MIBICMPINFO = record icmpInStats: MIBICMPSTATS; icmpOutStats: MIBICMPSTATS; end; {$EXTERNALSYM _MIBICMPINFO} MIBICMPINFO = _MIBICMPINFO; {$EXTERNALSYM MIBICMPINFO} TMibIcmpInfo = MIBICMPINFO;

PMIB_ICMP = ^MIB_ICMP; {$EXTERNALSYM PMIB_ICMP}

32

Page 33: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

_MIB_ICMP = record stats: MIBICMPINFO; end; {$EXTERNALSYM _MIB_ICMP} MIB_ICMP = _MIB_ICMP; {$EXTERNALSYM MIB_ICMP} TMibIcmp = MIB_ICMP; PMibIcmp = PMIB_ICMP;

PMIB_UDPSTATS = ^MIB_UDPSTATS; {$EXTERNALSYM PMIB_UDPSTATS} _MIB_UDPSTATS = record dwInDatagrams: DWORD; dwNoPorts: DWORD; dwInErrors: DWORD; dwOutDatagrams: DWORD; dwNumAddrs: DWORD; end; {$EXTERNALSYM _MIB_UDPSTATS} MIB_UDPSTATS = _MIB_UDPSTATS; {$EXTERNALSYM MIB_UDPSTATS} TMibUdpStats = MIB_UDPSTATS; PMibUdpStats = PMIB_UDPSTATS;

PMIB_UDPROW = ^MIB_UDPROW; {$EXTERNALSYM PMIB_UDPROW} _MIB_UDPROW = record dwLocalAddr: DWORD; dwLocalPort: DWORD; end; {$EXTERNALSYM _MIB_UDPROW} MIB_UDPROW = _MIB_UDPROW; {$EXTERNALSYM MIB_UDPROW} TMibUdpRow = MIB_UDPROW; PMibUdpRow = PMIB_UDPROW;

PMIB_UDPTABLE = ^MIB_UDPTABLE; {$EXTERNALSYM PMIB_UDPTABLE} _MIB_UDPTABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_UDPROW;

33

Page 34: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

end; {$EXTERNALSYM _MIB_UDPTABLE} MIB_UDPTABLE = _MIB_UDPTABLE; {$EXTERNALSYM MIB_UDPTABLE} TMibUdpTable = MIB_UDPTABLE; PMibUdpTable = PMIB_UDPTABLE;

// #define SIZEOF_UDPTABLE(X) (FIELD_OFFSET(MIB_UDPTABLE, table[0]) + ((X) * sizeof(MIB_UDPROW)) + ALIGN_SIZE)

PMIB_TCPSTATS = ^MIB_TCPSTATS; {$EXTERNALSYM PMIB_TCPSTATS} _MIB_TCPSTATS = record dwRtoAlgorithm: DWORD; dwRtoMin: DWORD; dwRtoMax: DWORD; dwMaxConn: DWORD; dwActiveOpens: DWORD; dwPassiveOpens: DWORD; dwAttemptFails: DWORD; dwEstabResets: DWORD; dwCurrEstab: DWORD; dwInSegs: DWORD; dwOutSegs: DWORD; dwRetransSegs: DWORD; dwInErrs: DWORD; dwOutRsts: DWORD; dwNumConns: DWORD; end; {$EXTERNALSYM _MIB_TCPSTATS} MIB_TCPSTATS = _MIB_TCPSTATS; {$EXTERNALSYM MIB_TCPSTATS} TMibTcpStats = MIB_TCPSTATS; PMibTcpStats = PMIB_TCPSTATS;

const MIB_TCP_RTO_OTHER = 1; {$EXTERNALSYM MIB_TCP_RTO_OTHER} MIB_TCP_RTO_CONSTANT = 2; {$EXTERNALSYM MIB_TCP_RTO_CONSTANT} MIB_TCP_RTO_RSRE = 3;

34

Page 35: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM MIB_TCP_RTO_RSRE} MIB_TCP_RTO_VANJ = 4; {$EXTERNALSYM MIB_TCP_RTO_VANJ}

MIB_TCP_MAXCONN_DYNAMIC = DWORD(-1); {$EXTERNALSYM MIB_TCP_MAXCONN_DYNAMIC}

type PMIB_TCPROW = ^MIB_TCPROW; {$EXTERNALSYM PMIB_TCPROW} _MIB_TCPROW = record dwState: DWORD; dwLocalAddr: DWORD; dwLocalPort: DWORD; dwRemoteAddr: DWORD; dwRemotePort: DWORD; end; {$EXTERNALSYM _MIB_TCPROW} MIB_TCPROW = _MIB_TCPROW; {$EXTERNALSYM MIB_TCPROW} TMibTcpRow = MIB_TCPROW; PMibTcpRow = PMIB_TCPROW;

const MIB_TCP_STATE_CLOSED = 1; {$EXTERNALSYM MIB_TCP_STATE_CLOSED} MIB_TCP_STATE_LISTEN = 2; {$EXTERNALSYM MIB_TCP_STATE_LISTEN} MIB_TCP_STATE_SYN_SENT = 3;

{$EXTERNALSYM MIB_TCP_STATE_SYN_SENT} MIB_TCP_STATE_SYN_RCVD = 4; {$EXTERNALSYM MIB_TCP_STATE_SYN_RCVD} MIB_TCP_STATE_ESTAB = 5; {$EXTERNALSYM MIB_TCP_STATE_ESTAB} MIB_TCP_STATE_FIN_WAIT1 = 6; {$EXTERNALSYM MIB_TCP_STATE_FIN_WAIT1} MIB_TCP_STATE_FIN_WAIT2 = 7; {$EXTERNALSYM MIB_TCP_STATE_FIN_WAIT2} MIB_TCP_STATE_CLOSE_WAIT = 8; {$EXTERNALSYM MIB_TCP_STATE_CLOSE_WAIT}

35

Page 36: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

MIB_TCP_STATE_CLOSING = 9; {$EXTERNALSYM MIB_TCP_STATE_CLOSING} MIB_TCP_STATE_LAST_ACK = 10; {$EXTERNALSYM MIB_TCP_STATE_LAST_ACK} MIB_TCP_STATE_TIME_WAIT = 11; {$EXTERNALSYM MIB_TCP_STATE_TIME_WAIT} MIB_TCP_STATE_DELETE_TCB = 12; {$EXTERNALSYM MIB_TCP_STATE_DELETE_TCB}

type PMIB_TCPTABLE = ^MIB_TCPTABLE; {$EXTERNALSYM PMIB_TCPTABLE} _MIB_TCPTABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_TCPROW; end; {$EXTERNALSYM _MIB_TCPTABLE} MIB_TCPTABLE = _MIB_TCPTABLE; {$EXTERNALSYM MIB_TCPTABLE} TMibTcpTable = MIB_TCPTABLE; PMibTcpTable = PMIB_TCPTABLE;

// #define SIZEOF_TCPTABLE(X) (FIELD_OFFSET(MIB_TCPTABLE,table[0]) + ((X) * sizeof(MIB_TCPROW)) + ALIGN_SIZE)

const MIB_USE_CURRENT_TTL = DWORD(-1); {$EXTERNALSYM MIB_USE_CURRENT_TTL} MIB_USE_CURRENT_FORWARDING = DWORD(-1); {$EXTERNALSYM MIB_USE_CURRENT_FORWARDING}

type PMIB_IPSTATS = ^MIB_IPSTATS; {$EXTERNALSYM PMIB_IPSTATS} _MIB_IPSTATS = record dwForwarding: DWORD; dwDefaultTTL: DWORD; dwInReceives: DWORD; dwInHdrErrors: DWORD; dwInAddrErrors: DWORD;

36

Page 37: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

dwForwDatagrams: DWORD; dwInUnknownProtos: DWORD; dwInDiscards: DWORD; dwInDelivers: DWORD; dwOutRequests: DWORD; dwRoutingDiscards: DWORD; dwOutDiscards: DWORD; dwOutNoRoutes: DWORD; dwReasmTimeout: DWORD; dwReasmReqds: DWORD; dwReasmOks: DWORD; dwReasmFails: DWORD; dwFragOks: DWORD; dwFragFails: DWORD; dwFragCreates: DWORD; dwNumIf: DWORD; dwNumAddr: DWORD; dwNumRoutes: DWORD; end; {$EXTERNALSYM _MIB_IPSTATS} MIB_IPSTATS = _MIB_IPSTATS; {$EXTERNALSYM MIB_IPSTATS} TMibIpStats = MIB_IPSTATS; PMibIpStats = PMIB_IPSTATS;const MIB_IP_FORWARDING = 1; {$EXTERNALSYM MIB_IP_FORWARDING} MIB_IP_NOT_FORWARDING = 2; {$EXTERNALSYM MIB_IP_NOT_FORWARDING}type PMIB_IPADDRROW = ^MIB_IPADDRROW; {$EXTERNALSYM PMIB_IPADDRROW} _MIB_IPADDRROW = record dwAddr: DWORD; dwIndex: DWORD; dwMask: DWORD; dwBCastAddr: DWORD; dwReasmSize: DWORD; unused1: Word; unused2: Word; end;

37

Page 38: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM _MIB_IPADDRROW} MIB_IPADDRROW = _MIB_IPADDRROW; {$EXTERNALSYM MIB_IPADDRROW} TMibIpAddrRow = MIB_IPADDRROW; PMibIpAddrRow = PMIB_IPADDRROW; PMIB_IPADDRTABLE = ^MIB_IPADDRTABLE; {$EXTERNALSYM PMIB_IPADDRTABLE} _MIB_IPADDRTABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IPADDRROW; end; {$EXTERNALSYM _MIB_IPADDRTABLE} MIB_IPADDRTABLE = _MIB_IPADDRTABLE; {$EXTERNALSYM MIB_IPADDRTABLE} TMibIpAddrTable = _MIB_IPADDRTABLE; PMibIpAddrTable = PMIB_IPADDRTABLE;// #define SIZEOF_IPADDRTABLE(X) (FIELD_OFFSET(MIB_IPADDRTABLE,table[0]) + ((X) * sizeof(MIB_IPADDRROW)) + ALIGN_SIZE)type PMIB_IPFORWARDNUMBER = ^MIB_IPFORWARDNUMBER; {$EXTERNALSYM PMIB_IPFORWARDNUMBER} _MIB_IPFORWARDNUMBER = record dwValue: DWORD; end; {$EXTERNALSYM _MIB_IPFORWARDNUMBER} MIB_IPFORWARDNUMBER = _MIB_IPFORWARDNUMBER; {$EXTERNALSYM MIB_IPFORWARDNUMBER} TMibIpForwardNumber = MIB_IPFORWARDNUMBER; PMibIpForwardNumber = PMIB_IPFORWARDNUMBER; PMIB_IPFORWARDROW = ^MIB_IPFORWARDROW; {$EXTERNALSYM PMIB_IPFORWARDROW} _MIB_IPFORWARDROW = record dwForwardDest: DWORD; dwForwardMask: DWORD; dwForwardPolicy: DWORD; dwForwardNextHop: DWORD; dwForwardIfIndex: DWORD; dwForwardType: DWORD; dwForwardProto: DWORD; dwForwardAge: DWORD;

38

Page 39: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

dwForwardNextHopAS: DWORD; dwForwardMetric1: DWORD; dwForwardMetric2: DWORD; dwForwardMetric3: DWORD; dwForwardMetric4: DWORD; dwForwardMetric5: DWORD; end; {$EXTERNALSYM _MIB_IPFORWARDROW} MIB_IPFORWARDROW = _MIB_IPFORWARDROW; {$EXTERNALSYM MIB_IPFORWARDROW} TMibIpForwardRow = MIB_IPFORWARDROW; PMibIpForwardRow = PMIB_IPFORWARDROW;const MIB_IPROUTE_TYPE_OTHER = 1; {$EXTERNALSYM MIB_IPROUTE_TYPE_OTHER} MIB_IPROUTE_TYPE_INVALID = 2; {$EXTERNALSYM MIB_IPROUTE_TYPE_INVALID} MIB_IPROUTE_TYPE_DIRECT = 3; {$EXTERNALSYM MIB_IPROUTE_TYPE_DIRECT} MIB_IPROUTE_TYPE_INDIRECT = 4; {$EXTERNALSYM MIB_IPROUTE_TYPE_INDIRECT} MIB_IPROUTE_METRIC_UNUSED = DWORD(-1); {$EXTERNALSYM MIB_IPROUTE_METRIC_UNUSED}// THESE MUST MATCH the ids in routprot.hconst MIB_IPPROTO_OTHER = 1; {$EXTERNALSYM MIB_IPPROTO_OTHER} MIB_IPPROTO_LOCAL = 2; {$EXTERNALSYM MIB_IPPROTO_LOCAL} MIB_IPPROTO_NETMGMT = 3; {$EXTERNALSYM MIB_IPPROTO_NETMGMT} MIB_IPPROTO_ICMP = 4; {$EXTERNALSYM MIB_IPPROTO_ICMP} MIB_IPPROTO_EGP = 5; {$EXTERNALSYM MIB_IPPROTO_EGP} MIB_IPPROTO_GGP = 6; {$EXTERNALSYM MIB_IPPROTO_GGP} MIB_IPPROTO_HELLO = 7; {$EXTERNALSYM MIB_IPPROTO_HELLO} MIB_IPPROTO_RIP = 8; {$EXTERNALSYM MIB_IPPROTO_RIP}

39

Page 40: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

MIB_IPPROTO_IS_IS = 9; {$EXTERNALSYM MIB_IPPROTO_IS_IS} MIB_IPPROTO_ES_IS = 10; {$EXTERNALSYM MIB_IPPROTO_ES_IS} MIB_IPPROTO_CISCO = 11; {$EXTERNALSYM MIB_IPPROTO_CISCO} MIB_IPPROTO_BBN = 12; {$EXTERNALSYM MIB_IPPROTO_BBN} MIB_IPPROTO_OSPF = 13; {$EXTERNALSYM MIB_IPPROTO_OSPF} MIB_IPPROTO_BGP = 14; {$EXTERNALSYM MIB_IPPROTO_BGP} MIB_IPPROTO_NT_AUTOSTATIC = 10002; {$EXTERNALSYM MIB_IPPROTO_NT_AUTOSTATIC} MIB_IPPROTO_NT_STATIC = 10006; {$EXTERNALSYM MIB_IPPROTO_NT_STATIC} MIB_IPPROTO_NT_STATIC_NON_DOD = 10007; {$EXTERNALSYM MIB_IPPROTO_NT_STATIC_NON_DOD}type PMIB_IPFORWARDTABLE = ^MIB_IPFORWARDTABLE; {$EXTERNALSYM PMIB_IPFORWARDTABLE} _MIB_IPFORWARDTABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IPFORWARDROW; end; {$EXTERNALSYM _MIB_IPFORWARDTABLE} MIB_IPFORWARDTABLE = _MIB_IPFORWARDTABLE; {$EXTERNALSYM MIB_IPFORWARDTABLE} TMibIpForwardTable = MIB_IPFORWARDTABLE; PMibIpForwardTable = PMIB_IPFORWARDTABLE;// #define SIZEOF_IPFORWARDTABLE(X) (FIELD_OFFSET(MIB_IPFORWARDTABLE,table[0]) + ((X) * sizeof(MIB_IPFORWARDROW)) + ALIGN_SIZE)type PMIB_IPNETROW = ^MIB_IPNETROW; {$EXTERNALSYM PMIB_IPNETROW} _MIB_IPNETROW = record dwIndex: DWORD; dwPhysAddrLen: DWORD; bPhysAddr: array [0..MAXLEN_PHYSADDR - 1] of BYTE; dwAddr: DWORD;

40

Page 41: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

dwType: DWORD; end; {$EXTERNALSYM _MIB_IPNETROW} MIB_IPNETROW = _MIB_IPNETROW; {$EXTERNALSYM MIB_IPNETROW} TMibIpNetRow = MIB_IPNETROW; PMibIpNetRow = PMIB_IPNETROW;const MIB_IPNET_TYPE_OTHER = 1; {$EXTERNALSYM MIB_IPNET_TYPE_OTHER} MIB_IPNET_TYPE_INVALID = 2; {$EXTERNALSYM MIB_IPNET_TYPE_INVALID} MIB_IPNET_TYPE_DYNAMIC = 3; {$EXTERNALSYM MIB_IPNET_TYPE_DYNAMIC} MIB_IPNET_TYPE_STATIC = 4; {$EXTERNALSYM MIB_IPNET_TYPE_STATIC}type PMIB_IPNETTABLE = ^MIB_IPNETTABLE; {$EXTERNALSYM PMIB_IPNETTABLE} _MIB_IPNETTABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IPNETROW; end; {$EXTERNALSYM _MIB_IPNETTABLE} MIB_IPNETTABLE = _MIB_IPNETTABLE; {$EXTERNALSYM MIB_IPNETTABLE} TMibIpNetTable = MIB_IPNETTABLE; PMibIpNetTable = PMIB_IPNETTABLE;// #define SIZEOF_IPNETTABLE(X) (FIELD_OFFSET(MIB_IPNETTABLE, table[0]) + ((X) * sizeof(MIB_IPNETROW)) + ALIGN_SIZE)type PMIB_IPMCAST_OIF = ^MIB_IPMCAST_OIF; {$EXTERNALSYM PMIB_IPMCAST_OIF} _MIB_IPMCAST_OIF = record dwOutIfIndex: DWORD; dwNextHopAddr: DWORD; pvReserved: Pointer; dwReserved: DWORD; end; {$EXTERNALSYM _MIB_IPMCAST_OIF}

41

Page 42: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

MIB_IPMCAST_OIF = _MIB_IPMCAST_OIF; {$EXTERNALSYM MIB_IPMCAST_OIF} TMibIpmCastOif = MIB_IPMCAST_OIF; PMibIpmCastOif = PMIB_IPMCAST_OIF;

PMIB_IPMCAST_MFE = ^MIB_IPMCAST_MFE; {$EXTERNALSYM PMIB_IPMCAST_MFE} _MIB_IPMCAST_MFE = record dwGroup: DWORD; dwSource: DWORD; dwSrcMask: DWORD; dwUpStrmNgbr: DWORD; dwInIfIndex: DWORD; dwInIfProtocol: DWORD; dwRouteProtocol: DWORD; dwRouteNetwork: DWORD; dwRouteMask: DWORD; ulUpTime: ULONG; ulExpiryTime: ULONG; ulTimeOut: ULONG; ulNumOutIf: ULONG; fFlags: DWORD; dwReserved: DWORD; rgmioOutInfo: array [0..ANY_SIZE - 1] of MIB_IPMCAST_OIF; end; {$EXTERNALSYM _MIB_IPMCAST_MFE} MIB_IPMCAST_MFE = _MIB_IPMCAST_MFE; {$EXTERNALSYM MIB_IPMCAST_MFE} TMibIpmCastMfe = MIB_IPMCAST_MFE; PMibIpmCastMfe = PMIB_IPMCAST_MFE; PMIB_MFE_TABLE = ^MIB_MFE_TABLE; {$EXTERNALSYM PMIB_MFE_TABLE} _MIB_MFE_TABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IPMCAST_MFE; end; {$EXTERNALSYM _MIB_MFE_TABLE} MIB_MFE_TABLE = _MIB_MFE_TABLE; {$EXTERNALSYM MIB_MFE_TABLE} TMibMfeTable = MIB_MFE_TABLE; PMibMfeTable = PMIB_MFE_TABLE;

42

Page 43: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// #define SIZEOF_BASIC_MIB_MFE \// (ULONG)(FIELD_OFFSET(MIB_IPMCAST_MFE, rgmioOutInfo[0]))// #define SIZEOF_MIB_MFE(X) \// (SIZEOF_BASIC_MIB_MFE + ((X) * sizeof(MIB_IPMCAST_OIF)))type PMIB_IPMCAST_OIF_STATS = ^MIB_IPMCAST_OIF_STATS; {$EXTERNALSYM PMIB_IPMCAST_OIF_STATS} _MIB_IPMCAST_OIF_STATS = record dwOutIfIndex: DWORD; dwNextHopAddr: DWORD; pvDialContext: Pointer; ulTtlTooLow: ULONG; ulFragNeeded: ULONG; ulOutPackets: ULONG; ulOutDiscards: ULONG; end; {$EXTERNALSYM _MIB_IPMCAST_OIF_STATS} MIB_IPMCAST_OIF_STATS = _MIB_IPMCAST_OIF_STATS; {$EXTERNALSYM MIB_IPMCAST_OIF_STATS} TMibIpmCastOifStats = MIB_IPMCAST_OIF_STATS; PMibIpmCastOifStats = PMIB_IPMCAST_OIF_STATS; PMIB_IPMCAST_MFE_STATS = ^MIB_IPMCAST_MFE_STATS; {$EXTERNALSYM PMIB_IPMCAST_MFE_STATS} _MIB_IPMCAST_MFE_STATS = record dwGroup: DWORD; dwSource: DWORD; dwSrcMask: DWORD; dwUpStrmNgbr: DWORD; dwInIfIndex: DWORD; dwInIfProtocol: DWORD; dwRouteProtocol: DWORD; dwRouteNetwork: DWORD; dwRouteMask: DWORD; ulUpTime: ULONG; ulExpiryTime: ULONG; ulNumOutIf: ULONG; ulInPkts: ULONG; ulInOctets: ULONG; ulPktsDifferentIf: ULONG; ulQueueOverflow: ULONG;

43

Page 44: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

rgmiosOutStats: array [0..ANY_SIZE - 1] of MIB_IPMCAST_OIF_STATS; end; {$EXTERNALSYM _MIB_IPMCAST_MFE_STATS} MIB_IPMCAST_MFE_STATS = _MIB_IPMCAST_MFE_STATS; {$EXTERNALSYM MIB_IPMCAST_MFE_STATS} TMibIpmCastMfeStats = MIB_IPMCAST_MFE_STATS; PMibIpmCastMfeStats = PMIB_IPMCAST_MFE_STATS;

PMIB_MFE_STATS_TABLE = ^MIB_MFE_STATS_TABLE; {$EXTERNALSYM PMIB_MFE_STATS_TABLE} _MIB_MFE_STATS_TABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IPMCAST_MFE_STATS; end; {$EXTERNALSYM _MIB_MFE_STATS_TABLE} MIB_MFE_STATS_TABLE = _MIB_MFE_STATS_TABLE; {$EXTERNALSYM MIB_MFE_STATS_TABLE} TMibMfeStatsTable = MIB_MFE_STATS_TABLE; PMibMfeStatsTable = PMIB_MFE_STATS_TABLE;// #define SIZEOF_BASIC_MIB_MFE_STATS \// (ULONG)(FIELD_OFFSET(MIB_IPMCAST_MFE_STATS, rgmiosOutStats[0]))// #define SIZEOF_MIB_MFE_STATS(X) \// (SIZEOF_BASIC_MIB_MFE_STATS + ((X) * sizeof(MIB_IPMCAST_OIF_STATS)))type PMIB_IPMCAST_GLOBAL = ^MIB_IPMCAST_GLOBAL; {$EXTERNALSYM PMIB_IPMCAST_GLOBAL} _MIB_IPMCAST_GLOBAL = record dwEnable: DWORD; end; {$EXTERNALSYM _MIB_IPMCAST_GLOBAL} MIB_IPMCAST_GLOBAL = _MIB_IPMCAST_GLOBAL; {$EXTERNALSYM MIB_IPMCAST_GLOBAL} TMibIpmCastGlobal = MIB_IPMCAST_GLOBAL; PMibIpmCastGlobal = PMIB_IPMCAST_GLOBAL; PMIB_IPMCAST_IF_ENTRY = ^MIB_IPMCAST_IF_ENTRY; {$EXTERNALSYM PMIB_IPMCAST_IF_ENTRY} _MIB_IPMCAST_IF_ENTRY = record dwIfIndex: DWORD;

44

Page 45: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

dwTtl: DWORD; dwProtocol: DWORD; dwRateLimit: DWORD; ulInMcastOctets: ULONG; ulOutMcastOctets: ULONG; end; {$EXTERNALSYM _MIB_IPMCAST_IF_ENTRY} MIB_IPMCAST_IF_ENTRY = _MIB_IPMCAST_IF_ENTRY; {$EXTERNALSYM MIB_IPMCAST_IF_ENTRY} TMibIpmCastIfEntry = MIB_IPMCAST_IF_ENTRY; PMibIpmCastIfEntry = PMIB_IPMCAST_IF_ENTRY; PMIB_IPMCAST_IF_TABLE = ^MIB_IPMCAST_IF_TABLE; {$EXTERNALSYM PMIB_IPMCAST_IF_TABLE} _MIB_IPMCAST_IF_TABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IPMCAST_IF_ENTRY; end; {$EXTERNALSYM _MIB_IPMCAST_IF_TABLE} MIB_IPMCAST_IF_TABLE = _MIB_IPMCAST_IF_TABLE; {$EXTERNALSYM MIB_IPMCAST_IF_TABLE} TMibIpmCastIfTable = MIB_IPMCAST_IF_TABLE; PMibIpmCastIfTable = PMIB_IPMCAST_IF_TABLE;// #define SIZEOF_MCAST_IF_TABLE(X) (FIELD_OFFSET(MIB_IPMCAST_IF_TABLE,table[0]) + ((X) * sizeof(MIB_IPMCAST_IF_ENTRY)) + ALIGN_SIZE)type PMIB_IPMCAST_BOUNDARY = ^MIB_IPMCAST_BOUNDARY; {$EXTERNALSYM PMIB_IPMCAST_BOUNDARY} _MIB_IPMCAST_BOUNDARY = record dwIfIndex: DWORD; dwGroupAddress: DWORD; dwGroupMask: DWORD; dwStatus: DWORD; end; {$EXTERNALSYM _MIB_IPMCAST_BOUNDARY} MIB_IPMCAST_BOUNDARY = _MIB_IPMCAST_BOUNDARY; {$EXTERNALSYM MIB_IPMCAST_BOUNDARY} TMibIpmCastBoundary = MIB_IPMCAST_BOUNDARY; PMibIpmCastBoundary = PMIB_IPMCAST_BOUNDARY; PMIB_IPMCAST_BOUNDARY_TABLE = ^MIB_IPMCAST_BOUNDARY_TABLE;

45

Page 46: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM PMIB_IPMCAST_BOUNDARY_TABLE} _MIB_IPMCAST_BOUNDARY_TABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IPMCAST_BOUNDARY; end; {$EXTERNALSYM _MIB_IPMCAST_BOUNDARY_TABLE} MIB_IPMCAST_BOUNDARY_TABLE = _MIB_IPMCAST_BOUNDARY_TABLE; {$EXTERNALSYM MIB_IPMCAST_BOUNDARY_TABLE} TMibIpmCastBoundaryTable = MIB_IPMCAST_BOUNDARY_TABLE; PMibIpmCastBoundaryTable = PMIB_IPMCAST_BOUNDARY_TABLE;// #define SIZEOF_BOUNDARY_TABLE(X) (FIELD_OFFSET(MIB_IPMCAST_BOUNDARY_TABLE,table[0]) + ((X) * sizeof(MIB_IPMCAST_BOUNDARY)) + ALIGN_SIZE)type PMIB_BOUNDARYROW = ^MIB_BOUNDARYROW; {$EXTERNALSYM PMIB_BOUNDARYROW} MIB_BOUNDARYROW = record dwGroupAddress: DWORD; dwGroupMask: DWORD; end; {$EXTERNALSYM MIB_BOUNDARYROW} TMibBoundaryRow = MIB_BOUNDARYROW; PMibBoundaryRow = PMIB_BOUNDARYROW;// Structure matching what goes in the registry in a block of type// IP_MCAST_LIMIT_INFO. This contains the fields of// MIB_IPMCAST_IF_ENTRY which are configurable. PMIB_MCAST_LIMIT_ROW = ^MIB_MCAST_LIMIT_ROW; {$EXTERNALSYM PMIB_MCAST_LIMIT_ROW} MIB_MCAST_LIMIT_ROW = record dwTtl: DWORD; dwRateLimit: DWORD; end; {$EXTERNALSYM MIB_MCAST_LIMIT_ROW} TMibMcastLimitRow = MIB_MCAST_LIMIT_ROW; PMibMcastLimitRow = PMIB_MCAST_LIMIT_ROW;const MAX_SCOPE_NAME_LEN = 255; {$EXTERNALSYM MAX_SCOPE_NAME_LEN}// Scope names are unicode. SNMP and MZAP use UTF-8 encoding.

46

Page 47: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

type SN_CHAR = WCHAR; {$EXTERNALSYM SN_CHAR} SCOPE_NAME_BUFFER = array [0..MAX_SCOPE_NAME_LEN] of SN_CHAR; {$EXTERNALSYM SCOPE_NAME_BUFFER} SCOPE_NAME = ^SN_CHAR; {$EXTERNALSYM SCOPE_NAME} PMIB_IPMCAST_SCOPE = ^MIB_IPMCAST_SCOPE; {$EXTERNALSYM PMIB_IPMCAST_SCOPE} _MIB_IPMCAST_SCOPE = record dwGroupAddress: DWORD; dwGroupMask: DWORD; snNameBuffer: SCOPE_NAME_BUFFER; dwStatus: DWORD; end; {$EXTERNALSYM _MIB_IPMCAST_SCOPE} MIB_IPMCAST_SCOPE = _MIB_IPMCAST_SCOPE; {$EXTERNALSYM MIB_IPMCAST_SCOPE} TMibIpmCastScope = MIB_IPMCAST_SCOPE; PMibIpmCastScope = PMIB_IPMCAST_SCOPE; PMIB_IPDESTROW = ^MIB_IPDESTROW; {$EXTERNALSYM PMIB_IPDESTROW} _MIB_IPDESTROW = record ForwardRow: MIB_IPFORWARDROW; dwForwardPreference: DWORD; dwForwardViewSet: DWORD; end; {$EXTERNALSYM _MIB_IPDESTROW} MIB_IPDESTROW = _MIB_IPDESTROW; {$EXTERNALSYM MIB_IPDESTROW} TMibIpDestRow = MIB_IPDESTROW; PMibIpDestRow = PMIB_IPDESTROW; PMIB_IPDESTTABLE = ^MIB_IPDESTTABLE; {$EXTERNALSYM PMIB_IPDESTTABLE} _MIB_IPDESTTABLE = record dwNumEntries: DWORD; table: array [0..ANY_SIZE - 1] of MIB_IPDESTROW; end; {$EXTERNALSYM _MIB_IPDESTTABLE} MIB_IPDESTTABLE = _MIB_IPDESTTABLE;

47

Page 48: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM MIB_IPDESTTABLE} TMibIpDestTable = MIB_IPDESTTABLE; PMibIpDestTable = PMIB_IPDESTTABLE; PMIB_BEST_IF = ^MIB_BEST_IF; {$EXTERNALSYM PMIB_BEST_IF} _MIB_BEST_IF = record dwDestAddr: DWORD; dwIfIndex: DWORD; end; {$EXTERNALSYM _MIB_BEST_IF} MIB_BEST_IF = _MIB_BEST_IF; {$EXTERNALSYM MIB_BEST_IF} TMibBestIf = MIB_BEST_IF; PMibBestIf = PMIB_BEST_IF; PMIB_PROXYARP = ^MIB_PROXYARP; {$EXTERNALSYM PMIB_PROXYARP} _MIB_PROXYARP = record dwAddress: DWORD; dwMask: DWORD; dwIfIndex: DWORD; end; {$EXTERNALSYM _MIB_PROXYARP} MIB_PROXYARP = _MIB_PROXYARP; {$EXTERNALSYM MIB_PROXYARP} TMibProxyArp = MIB_PROXYARP; PMibProxyArp = PMIB_PROXYARP; PMIB_IFSTATUS = ^MIB_IFSTATUS; {$EXTERNALSYM PMIB_IFSTATUS} _MIB_IFSTATUS = record dwIfIndex: DWORD; dwAdminStatus: DWORD; dwOperationalStatus: DWORD; bMHbeatActive: BOOL; bMHbeatAlive: BOOL; end; {$EXTERNALSYM _MIB_IFSTATUS} MIB_IFSTATUS = _MIB_IFSTATUS; {$EXTERNALSYM MIB_IFSTATUS} TMibIfStatus = MIB_IFSTATUS; PMibIfStatus = PMIB_IFSTATUS; PMIB_ROUTESTATE = ^MIB_ROUTESTATE;

48

Page 49: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM PMIB_ROUTESTATE} _MIB_ROUTESTATE = record bRoutesSetToStack: BOOL; end; {$EXTERNALSYM _MIB_ROUTESTATE} MIB_ROUTESTATE = _MIB_ROUTESTATE; {$EXTERNALSYM MIB_ROUTESTATE} TMibRouteState = MIB_ROUTESTATE; PMibRouteState = PMIB_ROUTESTATE;//////////////////////////////////////////////////////////////////////////////// All the info passed to (SET/CREATE) and from (GET/GETNEXT/GETFIRST) //// IP Router Manager is encapsulated in the following "discriminated" //// union. To pass, say MIB_IFROW, use the following code //// PMIB_OPAQUE_INFO pInfo; //// PMIB_IFROW pIfRow; //// DWORD rgdwBuff[(MAX_MIB_OFFSET + sizeof(MIB_IFROW))/sizeof(DWORD) + 1]; //// pInfo = (PMIB_OPAQUE_INFO)rgdwBuffer; //// pIfRow = (MIB_IFROW *)(pInfo->rgbyData); //// This can also be accomplished by using the following macro //// DEFINE_MIB_BUFFER(pInfo,MIB_IFROW, pIfRow); ////////////////////////////////////////////////////////////////////////////////type PMibOpaqueInfo = ^TMibOpaqueInfo; _MIB_OPAQUE_INFO = record dwId: DWORD; case Integer of 0: (ullAlign: Int64); // ULONGLONG (unsigned!) 1: (rgbyData: array [0..0] of BYTE); end; {$EXTERNALSYM _MIB_OPAQUE_INFO} MIB_OPAQUE_INFO = _MIB_OPAQUE_INFO; {$EXTERNALSYM MIB_OPAQUE_INFO} TMibOpaqueInfo = MIB_OPAQUE_INFO;const MAX_MIB_OFFSET = 8; {$EXTERNALSYM MAX_MIB_OFFSET}// #define MIB_INFO_SIZE(S) (MAX_MIB_OFFSET + sizeof(S))// #define MIB_INFO_SIZE_IN_DWORDS(S) \

49

Page 50: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// ((MIB_INFO_SIZE(S))/sizeof(DWORD) + 1)

// #define DEFINE_MIB_BUFFER(X,Y,Z) \// DWORD

__rgdwBuff[MIB_INFO_SIZE_IN_DWORDS(Y)]; \// PMIB_OPAQUE_INFO X = (PMIB_OPAQUE_INFO)__rgdwBuff; \// Y * Z = (Y *)(X->rgbyData)

// #define CAST_MIB_INFO(X,Y,Z) Z = (Y)(X->rgbyData)

implementationend.

unit IpTypes;{$ALIGN ON}{$Z4}interfaceuses Windows;type // #include <time.h> time_t = Longint; {$EXTERNALSYM time_t}// Definitions and structures used by getnetworkparams and getadaptersinfo apisconst MAX_ADAPTER_DESCRIPTION_LENGTH = 128; // arb. {$EXTERNALSYM MAX_ADAPTER_DESCRIPTION_LENGTH} MAX_ADAPTER_NAME_LENGTH = 256; // arb. {$EXTERNALSYM MAX_ADAPTER_NAME_LENGTH} MAX_ADAPTER_ADDRESS_LENGTH = 8; // arb. {$EXTERNALSYM MAX_ADAPTER_ADDRESS_LENGTH} DEFAULT_MINIMUM_ENTITIES = 32; // arb. {$EXTERNALSYM DEFAULT_MINIMUM_ENTITIES} MAX_HOSTNAME_LEN = 128; // arb. {$EXTERNALSYM MAX_HOSTNAME_LEN} MAX_DOMAIN_NAME_LEN = 128; // arb. {$EXTERNALSYM MAX_DOMAIN_NAME_LEN} MAX_SCOPE_ID_LEN = 256; // arb.

50

Page 51: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM MAX_SCOPE_ID_LEN}

// types// Node Type

BROADCAST_NODETYPE = 1; {$EXTERNALSYM BROADCAST_NODETYPE} PEER_TO_PEER_NODETYPE = 2; {$EXTERNALSYM PEER_TO_PEER_NODETYPE} MIXED_NODETYPE = 4; {$EXTERNALSYM MIXED_NODETYPE} HYBRID_NODETYPE = 8; {$EXTERNALSYM HYBRID_NODETYPE}// Adapter Type IF_OTHER_ADAPTERTYPE = 0; {$EXTERNALSYM IF_OTHER_ADAPTERTYPE} IF_ETHERNET_ADAPTERTYPE = 1; {$EXTERNALSYM IF_ETHERNET_ADAPTERTYPE} IF_TOKEN_RING_ADAPTERTYPE = 2; {$EXTERNALSYM IF_TOKEN_RING_ADAPTERTYPE} IF_FDDI_ADAPTERTYPE = 3; {$EXTERNALSYM IF_FDDI_ADAPTERTYPE} IF_PPP_ADAPTERTYPE = 4; {$EXTERNALSYM IF_PPP_ADAPTERTYPE} IF_LOOPBACK_ADAPTERTYPE = 5; {$EXTERNALSYM IF_LOOPBACK_ADAPTERTYPE} IF_SLIP_ADAPTERTYPE = 6; {$EXTERNALSYM IF_SLIP_ADAPTERTYPE}// IP_ADDRESS_STRING - store an IP address as a dotted decimal stringtype PIP_MASK_STRING = ^IP_MASK_STRING; {$EXTERNALSYM PIP_MASK_STRING} IP_ADDRESS_STRING = record S: array [0..15] of Char; end; {$EXTERNALSYM IP_ADDRESS_STRING} PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING; {$EXTERNALSYM PIP_ADDRESS_STRING} IP_MASK_STRING = IP_ADDRESS_STRING; {$EXTERNALSYM IP_MASK_STRING} TIpAddressString = IP_ADDRESS_STRING;

51

Page 52: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

PIpAddressString = PIP_MASK_STRING;//// IP_ADDR_STRING - store an IP address with its corresponding subnet mask,// both as dotted decimal strings// PIP_ADDR_STRING = ^IP_ADDR_STRING; {$EXTERNALSYM PIP_ADDR_STRING} _IP_ADDR_STRING = record Next: PIP_ADDR_STRING; IpAddress: IP_ADDRESS_STRING; IpMask: IP_MASK_STRING; Context: DWORD; end; {$EXTERNALSYM _IP_ADDR_STRING} IP_ADDR_STRING = _IP_ADDR_STRING; {$EXTERNALSYM IP_ADDR_STRING} TIpAddrString = IP_ADDR_STRING; PIpAddrString = PIP_ADDR_STRING;//// ADAPTER_INFO - per-adapter information. All IP addresses are stored as// strings// PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO; {$EXTERNALSYM PIP_ADAPTER_INFO} _IP_ADAPTER_INFO = record Next: PIP_ADAPTER_INFO; ComboIndex: DWORD; AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char; Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char; AddressLength: UINT; Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE; Index: DWORD; Type_: UINT; DhcpEnabled: UINT; CurrentIpAddress: PIP_ADDR_STRING; IpAddressList: IP_ADDR_STRING;

52

Page 53: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

GatewayList: IP_ADDR_STRING; DhcpServer: IP_ADDR_STRING; HaveWins: BOOL; PrimaryWinsServer: IP_ADDR_STRING; SecondaryWinsServer: IP_ADDR_STRING; LeaseObtained: time_t; LeaseExpires: time_t; end; {$EXTERNALSYM _IP_ADAPTER_INFO} IP_ADAPTER_INFO = _IP_ADAPTER_INFO; {$EXTERNALSYM IP_ADAPTER_INFO} TIpAdapterInfo = IP_ADAPTER_INFO; PIpAdapterInfo = PIP_ADAPTER_INFO;//// IP_PER_ADAPTER_INFO - per-adapter IP information such as DNS server list.// PIP_PER_ADAPTER_INFO = ^IP_PER_ADAPTER_INFO; {$EXTERNALSYM PIP_PER_ADAPTER_INFO} _IP_PER_ADAPTER_INFO = record AutoconfigEnabled: UINT; AutoconfigActive: UINT; CurrentDnsServer: PIP_ADDR_STRING; DnsServerList: IP_ADDR_STRING; end; {$EXTERNALSYM _IP_PER_ADAPTER_INFO} IP_PER_ADAPTER_INFO = _IP_PER_ADAPTER_INFO; {$EXTERNALSYM IP_PER_ADAPTER_INFO} TIpPerAdapterInfo = IP_PER_ADAPTER_INFO; PIpPerAdapterInfo = PIP_PER_ADAPTER_INFO;//// FIXED_INFO - the set of IP-related information which does not depend on DHCP// PFIXED_INFO = ^FIXED_INFO; {$EXTERNALSYM PFIXED_INFO} FIXED_INFO = record HostName: array [0..MAX_HOSTNAME_LEN + 3] of Char; DomainName: array[0..MAX_DOMAIN_NAME_LEN + 3] of Char; CurrentDnsServer: PIP_ADDR_STRING; DnsServerList: IP_ADDR_STRING;

53

Page 54: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

NodeType: UINT; ScopeId: array [0..MAX_SCOPE_ID_LEN + 3] of Char; EnableRouting: UINT; EnableProxy: UINT; EnableDns: UINT; end; {$EXTERNALSYM FIXED_INFO} TFixedInfo = FIXED_INFO; PFixedInfo = PFIXED_INFO;implementationend.

unit IpIfConst;

{$ALIGN ON}{$Z4}interface

//////////////////////////////////////////////////////////////////////////////// Media types ////////////////////////////////////////////////////////////////////////////////

const MIN_IF_TYPE = 1; {$EXTERNALSYM MIN_IF_TYPE}

IF_TYPE_OTHER = 1; // None of the below {$EXTERNALSYM IF_TYPE_OTHER} IF_TYPE_REGULAR_1822 = 2; {$EXTERNALSYM IF_TYPE_REGULAR_1822} IF_TYPE_HDH_1822 = 3; {$EXTERNALSYM IF_TYPE_HDH_1822} IF_TYPE_DDN_X25 = 4; {$EXTERNALSYM IF_TYPE_DDN_X25} IF_TYPE_RFC877_X25 = 5; {$EXTERNALSYM IF_TYPE_RFC877_X25} IF_TYPE_ETHERNET_CSMACD = 6; {$EXTERNALSYM IF_TYPE_ETHERNET_CSMACD} IF_TYPE_IS088023_CSMACD = 7; {$EXTERNALSYM IF_TYPE_IS088023_CSMACD} IF_TYPE_ISO88024_TOKENBUS = 8;

54

Page 55: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM IF_TYPE_ISO88024_TOKENBUS} IF_TYPE_ISO88025_TOKENRING = 9; {$EXTERNALSYM IF_TYPE_ISO88025_TOKENRING} IF_TYPE_ISO88026_MAN = 10; {$EXTERNALSYM IF_TYPE_ISO88026_MAN} IF_TYPE_STARLAN = 11; {$EXTERNALSYM IF_TYPE_STARLAN} IF_TYPE_PROTEON_10MBIT = 12; {$EXTERNALSYM IF_TYPE_PROTEON_10MBIT} IF_TYPE_PROTEON_80MBIT = 13; {$EXTERNALSYM IF_TYPE_PROTEON_80MBIT} IF_TYPE_HYPERCHANNEL = 14; {$EXTERNALSYM IF_TYPE_HYPERCHANNEL} IF_TYPE_FDDI = 15; {$EXTERNALSYM IF_TYPE_FDDI} IF_TYPE_LAP_B = 16; {$EXTERNALSYM IF_TYPE_LAP_B} IF_TYPE_SDLC = 17; {$EXTERNALSYM IF_TYPE_SDLC} IF_TYPE_DS1 = 18; // DS1-MIB {$EXTERNALSYM IF_TYPE_DS1} IF_TYPE_E1 = 19; // Obsolete; see DS1-MIB {$EXTERNALSYM IF_TYPE_E1} IF_TYPE_BASIC_ISDN = 20; {$EXTERNALSYM IF_TYPE_BASIC_ISDN} IF_TYPE_PRIMARY_ISDN = 21; {$EXTERNALSYM IF_TYPE_PRIMARY_ISDN} IF_TYPE_PROP_POINT2POINT_SERIAL = 22; // proprietary serial {$EXTERNALSYM IF_TYPE_PROP_POINT2POINT_SERIAL} IF_TYPE_PPP = 23; {$EXTERNALSYM IF_TYPE_PPP} IF_TYPE_SOFTWARE_LOOPBACK = 24; {$EXTERNALSYM IF_TYPE_SOFTWARE_LOOPBACK} IF_TYPE_EON = 25; // CLNP over IP {$EXTERNALSYM IF_TYPE_EON} IF_TYPE_ETHERNET_3MBIT = 26; {$EXTERNALSYM IF_TYPE_ETHERNET_3MBIT} IF_TYPE_NSIP = 27; // XNS over IP {$EXTERNALSYM IF_TYPE_NSIP} IF_TYPE_SLIP = 28; // Generic Slip {$EXTERNALSYM IF_TYPE_SLIP}

55

Page 56: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

IF_TYPE_ULTRA = 29; // ULTRA Technologies {$EXTERNALSYM IF_TYPE_ULTRA} IF_TYPE_DS3 = 30; // DS3-MIB {$EXTERNALSYM IF_TYPE_DS3} IF_TYPE_SIP = 31; // SMDS, coffee {$EXTERNALSYM IF_TYPE_SIP} IF_TYPE_FRAMERELAY = 32; // DTE only {$EXTERNALSYM IF_TYPE_FRAMERELAY} IF_TYPE_RS232 = 33; {$EXTERNALSYM IF_TYPE_RS232} IF_TYPE_PARA = 34; // Parallel port {$EXTERNALSYM IF_TYPE_PARA} IF_TYPE_ARCNET = 35; {$EXTERNALSYM IF_TYPE_ARCNET} IF_TYPE_ARCNET_PLUS = 36; {$EXTERNALSYM IF_TYPE_ARCNET_PLUS} IF_TYPE_ATM = 37; // ATM cells {$EXTERNALSYM IF_TYPE_ATM} IF_TYPE_MIO_X25 = 38; {$EXTERNALSYM IF_TYPE_MIO_X25} IF_TYPE_SONET = 39; // SONET or SDH {$EXTERNALSYM IF_TYPE_SONET} IF_TYPE_X25_PLE = 40; {$EXTERNALSYM IF_TYPE_X25_PLE} IF_TYPE_ISO88022_LLC = 41; {$EXTERNALSYM IF_TYPE_ISO88022_LLC} IF_TYPE_LOCALTALK = 42; {$EXTERNALSYM IF_TYPE_LOCALTALK} IF_TYPE_SMDS_DXI = 43; {$EXTERNALSYM IF_TYPE_SMDS_DXI} IF_TYPE_FRAMERELAY_SERVICE = 44; // FRNETSERV-MIB {$EXTERNALSYM IF_TYPE_FRAMERELAY_SERVICE} IF_TYPE_V35 = 45; {$EXTERNALSYM IF_TYPE_V35} IF_TYPE_HSSI = 46; {$EXTERNALSYM IF_TYPE_HSSI} IF_TYPE_HIPPI = 47; {$EXTERNALSYM IF_TYPE_HIPPI} IF_TYPE_MODEM = 48; // Generic Modem {$EXTERNALSYM IF_TYPE_MODEM} IF_TYPE_AAL5 = 49; // AAL5 over ATM

56

Page 57: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM IF_TYPE_AAL5} IF_TYPE_SONET_PATH = 50; {$EXTERNALSYM IF_TYPE_SONET_PATH} IF_TYPE_SONET_VT = 51; {$EXTERNALSYM IF_TYPE_SONET_VT} IF_TYPE_SMDS_ICIP = 52; // SMDS InterCarrier Interface {$EXTERNALSYM IF_TYPE_SMDS_ICIP} IF_TYPE_PROP_VIRTUAL = 53; // Proprietary virtual/internal {$EXTERNALSYM IF_TYPE_PROP_VIRTUAL} IF_TYPE_PROP_MULTIPLEXOR = 54; // Proprietary multiplexing {$EXTERNALSYM IF_TYPE_PROP_MULTIPLEXOR} IF_TYPE_IEEE80212 = 55; // 100BaseVG {$EXTERNALSYM IF_TYPE_IEEE80212} IF_TYPE_FIBRECHANNEL = 56; {$EXTERNALSYM IF_TYPE_FIBRECHANNEL} IF_TYPE_HIPPIINTERFACE = 57; {$EXTERNALSYM IF_TYPE_HIPPIINTERFACE} IF_TYPE_FRAMERELAY_INTERCONNECT = 58; // Obsolete, use 32 or 44 {$EXTERNALSYM IF_TYPE_FRAMERELAY_INTERCONNECT} IF_TYPE_AFLANE_8023 = 59; // ATM Emulated LAN for 802.3 {$EXTERNALSYM IF_TYPE_AFLANE_8023} IF_TYPE_AFLANE_8025 = 60; // ATM Emulated LAN for 802.5 {$EXTERNALSYM IF_TYPE_AFLANE_8025} IF_TYPE_CCTEMUL = 61; // ATM Emulated circuit {$EXTERNALSYM IF_TYPE_CCTEMUL} IF_TYPE_FASTETHER = 62; // Fast Ethernet (100BaseT) {$EXTERNALSYM IF_TYPE_FASTETHER} IF_TYPE_ISDN = 63; // ISDN and X.25 {$EXTERNALSYM IF_TYPE_ISDN} IF_TYPE_V11 = 64; // CCITT V.11/X.21 {$EXTERNALSYM IF_TYPE_V11} IF_TYPE_V36 = 65; // CCITT V.36 {$EXTERNALSYM IF_TYPE_V36} IF_TYPE_G703_64K = 66; // CCITT G703 at 64Kbps {$EXTERNALSYM IF_TYPE_G703_64K} IF_TYPE_G703_2MB = 67; // Obsolete; see DS1-MIB {$EXTERNALSYM IF_TYPE_G703_2MB} IF_TYPE_QLLC = 68; // SNA QLLC {$EXTERNALSYM IF_TYPE_QLLC} IF_TYPE_FASTETHER_FX = 69; // Fast Ethernet (100BaseFX)

57

Page 58: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM IF_TYPE_FASTETHER_FX} IF_TYPE_CHANNEL = 70; {$EXTERNALSYM IF_TYPE_CHANNEL} IF_TYPE_IEEE80211 = 71; // Radio spread spectrum {$EXTERNALSYM IF_TYPE_IEEE80211} IF_TYPE_IBM370PARCHAN = 72; // IBM System 360/370 OEMI Channel {$EXTERNALSYM IF_TYPE_IBM370PARCHAN} IF_TYPE_ESCON = 73; // IBM Enterprise Systems Connection {$EXTERNALSYM IF_TYPE_ESCON} IF_TYPE_DLSW = 74; // Data Link Switching {$EXTERNALSYM IF_TYPE_DLSW} IF_TYPE_ISDN_S = 75; // ISDN S/T interface {$EXTERNALSYM IF_TYPE_ISDN_S} IF_TYPE_ISDN_U = 76; // ISDN U interface {$EXTERNALSYM IF_TYPE_ISDN_U} IF_TYPE_LAP_D = 77; // Link Access Protocol D {$EXTERNALSYM IF_TYPE_LAP_D} IF_TYPE_IPSWITCH = 78; // IP Switching Objects {$EXTERNALSYM IF_TYPE_IPSWITCH} IF_TYPE_RSRB = 79; // Remote Source Route Bridging {$EXTERNALSYM IF_TYPE_RSRB} IF_TYPE_ATM_LOGICAL = 80; // ATM Logical Port {$EXTERNALSYM IF_TYPE_ATM_LOGICAL} IF_TYPE_DS0 = 81; // Digital Signal Level 0 {$EXTERNALSYM IF_TYPE_DS0} IF_TYPE_DS0_BUNDLE = 82; // Group of ds0s on the same ds1 {$EXTERNALSYM IF_TYPE_DS0_BUNDLE} IF_TYPE_BSC = 83; // Bisynchronous Protocol {$EXTERNALSYM IF_TYPE_BSC} IF_TYPE_ASYNC = 84; // Asynchronous Protocol {$EXTERNALSYM IF_TYPE_ASYNC} IF_TYPE_CNR = 85; // Combat Net Radio {$EXTERNALSYM IF_TYPE_CNR} IF_TYPE_ISO88025R_DTR = 86; // ISO 802.5r DTR {$EXTERNALSYM IF_TYPE_ISO88025R_DTR} IF_TYPE_EPLRS = 87; // Ext Pos Loc Report Sys {$EXTERNALSYM IF_TYPE_EPLRS} IF_TYPE_ARAP = 88; // Appletalk Remote Access Protocol {$EXTERNALSYM IF_TYPE_ARAP}

58

Page 59: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

IF_TYPE_PROP_CNLS = 89; // Proprietary Connectionless Proto {$EXTERNALSYM IF_TYPE_PROP_CNLS} IF_TYPE_HOSTPAD = 90; // CCITT-ITU X.29 PAD Protocol {$EXTERNALSYM IF_TYPE_HOSTPAD} IF_TYPE_TERMPAD = 91; // CCITT-ITU X.3 PAD Facility {$EXTERNALSYM IF_TYPE_TERMPAD} IF_TYPE_FRAMERELAY_MPI = 92; // Multiproto Interconnect over FR {$EXTERNALSYM IF_TYPE_FRAMERELAY_MPI} IF_TYPE_X213 = 93; // CCITT-ITU X213 {$EXTERNALSYM IF_TYPE_X213} IF_TYPE_ADSL = 94; // Asymmetric Digital Subscrbr Loop {$EXTERNALSYM IF_TYPE_ADSL} IF_TYPE_RADSL = 95; // Rate-Adapt Digital Subscrbr Loop {$EXTERNALSYM IF_TYPE_RADSL} IF_TYPE_SDSL = 96; // Symmetric Digital Subscriber Loop {$EXTERNALSYM IF_TYPE_SDSL} IF_TYPE_VDSL = 97; // Very H-Speed Digital Subscrb Loop {$EXTERNALSYM IF_TYPE_VDSL} IF_TYPE_ISO88025_CRFPRINT = 98; // ISO 802.5 CRFP {$EXTERNALSYM IF_TYPE_ISO88025_CRFPRINT} IF_TYPE_MYRINET = 99; // Myricom Myrinet {$EXTERNALSYM IF_TYPE_MYRINET} IF_TYPE_VOICE_EM = 100; // Voice recEive and transMit {$EXTERNALSYM IF_TYPE_VOICE_EM} IF_TYPE_VOICE_FXO = 101; // Voice Foreign Exchange Office {$EXTERNALSYM IF_TYPE_VOICE_FXO} IF_TYPE_VOICE_FXS = 102; // Voice Foreign Exchange Station {$EXTERNALSYM IF_TYPE_VOICE_FXS} IF_TYPE_VOICE_ENCAP = 103; // Voice encapsulation {$EXTERNALSYM IF_TYPE_VOICE_ENCAP} IF_TYPE_VOICE_OVERIP = 104; // Voice over IP encapsulation {$EXTERNALSYM IF_TYPE_VOICE_OVERIP} IF_TYPE_ATM_DXI = 105; // ATM DXI {$EXTERNALSYM IF_TYPE_ATM_DXI} IF_TYPE_ATM_FUNI = 106; // ATM FUNI {$EXTERNALSYM IF_TYPE_ATM_FUNI} IF_TYPE_ATM_IMA = 107; // ATM IMA

59

Page 60: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM IF_TYPE_ATM_IMA} IF_TYPE_PPPMULTILINKBUNDLE = 108; // PPP Multilink Bundle {$EXTERNALSYM IF_TYPE_PPPMULTILINKBUNDLE} IF_TYPE_IPOVER_CDLC = 109; // IBM ipOverCdlc {$EXTERNALSYM IF_TYPE_IPOVER_CDLC} IF_TYPE_IPOVER_CLAW = 110; // IBM Common Link Access to Workstn {$EXTERNALSYM IF_TYPE_IPOVER_CLAW} IF_TYPE_STACKTOSTACK = 111; // IBM stackToStack {$EXTERNALSYM IF_TYPE_STACKTOSTACK} IF_TYPE_VIRTUALIPADDRESS = 112; // IBM VIPA {$EXTERNALSYM IF_TYPE_VIRTUALIPADDRESS} IF_TYPE_MPC = 113; // IBM multi-proto channel support {$EXTERNALSYM IF_TYPE_MPC} IF_TYPE_IPOVER_ATM = 114; // IBM ipOverAtm {$EXTERNALSYM IF_TYPE_IPOVER_ATM} IF_TYPE_ISO88025_FIBER = 115; // ISO 802.5j Fiber Token Ring {$EXTERNALSYM IF_TYPE_ISO88025_FIBER} IF_TYPE_TDLC = 116; // IBM twinaxial data link control {$EXTERNALSYM IF_TYPE_TDLC} IF_TYPE_GIGABITETHERNET = 117; {$EXTERNALSYM IF_TYPE_GIGABITETHERNET} IF_TYPE_HDLC = 118; {$EXTERNALSYM IF_TYPE_HDLC} IF_TYPE_LAP_F = 119; {$EXTERNALSYM IF_TYPE_LAP_F} IF_TYPE_V37 = 120; {$EXTERNALSYM IF_TYPE_V37} IF_TYPE_X25_MLP = 121; // Multi-Link Protocol {$EXTERNALSYM IF_TYPE_X25_MLP} IF_TYPE_X25_HUNTGROUP = 122; // X.25 Hunt Group {$EXTERNALSYM IF_TYPE_X25_HUNTGROUP} IF_TYPE_TRANSPHDLC = 123; {$EXTERNALSYM IF_TYPE_TRANSPHDLC} IF_TYPE_INTERLEAVE = 124; // Interleave channel {$EXTERNALSYM IF_TYPE_INTERLEAVE} IF_TYPE_FAST = 125; // Fast channel {$EXTERNALSYM IF_TYPE_FAST} IF_TYPE_IP = 126; // IP (for APPN HPR in IP networks) {$EXTERNALSYM IF_TYPE_IP} IF_TYPE_DOCSCABLE_MACLAYER = 127; // CATV Mac Layer

60

Page 61: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM IF_TYPE_DOCSCABLE_MACLAYER} IF_TYPE_DOCSCABLE_DOWNSTREAM = 128; // CATV Downstream interface {$EXTERNALSYM IF_TYPE_DOCSCABLE_DOWNSTREAM} IF_TYPE_DOCSCABLE_UPSTREAM = 129; // CATV Upstream interface {$EXTERNALSYM IF_TYPE_DOCSCABLE_UPSTREAM} IF_TYPE_A12MPPSWITCH = 130; // Avalon Parallel Processor {$EXTERNALSYM IF_TYPE_A12MPPSWITCH} IF_TYPE_TUNNEL = 131; // Encapsulation interface {$EXTERNALSYM IF_TYPE_TUNNEL} IF_TYPE_COFFEE = 132; // Coffee pot {$EXTERNALSYM IF_TYPE_COFFEE} IF_TYPE_CES = 133; // Circuit Emulation Service {$EXTERNALSYM IF_TYPE_CES} IF_TYPE_ATM_SUBINTERFACE = 134; // ATM Sub Interface {$EXTERNALSYM IF_TYPE_ATM_SUBINTERFACE} IF_TYPE_L2_VLAN = 135; // Layer 2 Virtual LAN using 802.1Q {$EXTERNALSYM IF_TYPE_L2_VLAN} IF_TYPE_L3_IPVLAN = 136; // Layer 3 Virtual LAN using IP {$EXTERNALSYM IF_TYPE_L3_IPVLAN} IF_TYPE_L3_IPXVLAN = 137; // Layer 3 Virtual LAN using IPX {$EXTERNALSYM IF_TYPE_L3_IPXVLAN} IF_TYPE_DIGITALPOWERLINE = 138; // IP over Power Lines {$EXTERNALSYM IF_TYPE_DIGITALPOWERLINE} IF_TYPE_MEDIAMAILOVERIP = 139; // Multimedia Mail over IP {$EXTERNALSYM IF_TYPE_MEDIAMAILOVERIP} IF_TYPE_DTM = 140; // Dynamic syncronous Transfer Mode {$EXTERNALSYM IF_TYPE_DTM} IF_TYPE_DCN = 141; // Data Communications Network {$EXTERNALSYM IF_TYPE_DCN} IF_TYPE_IPFORWARD = 142; // IP Forwarding Interface {$EXTERNALSYM IF_TYPE_IPFORWARD} IF_TYPE_MSDSL = 143; // Multi-rate Symmetric DSL {$EXTERNALSYM IF_TYPE_MSDSL} IF_TYPE_IEEE1394 = 144; // IEEE1394 High Perf Serial Bus {$EXTERNALSYM IF_TYPE_IEEE1394}

61

Page 62: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

MAX_IF_TYPE = 144; {$EXTERNALSYM MAX_IF_TYPE}//////////////////////////////////////////////////////////////////////////////// Access types //////////////////////////////////////////////////////////////////////////////// IF_ACCESS_LOOPBACK = 1;

{$EXTERNALSYM IF_ACCESS_LOOPBACK} IF_ACCESS_BROADCAST = 2; {$EXTERNALSYM IF_ACCESS_BROADCAST} IF_ACCESS_POINTTOPOINT = 3; {$EXTERNALSYM IF_ACCESS_POINTTOPOINT} IF_ACCESS_POINTTOMULTIPOINT = 4; {$EXTERNALSYM IF_ACCESS_POINTTOMULTIPOINT}

//////////////////////////////////////////////////////////////////////////////// Connection Types ////////////////////////////////////////////////////////////////////////////////

IF_CONNECTION_DEDICATED = 1; {$EXTERNALSYM IF_CONNECTION_DEDICATED} IF_CONNECTION_PASSIVE = 2; {$EXTERNALSYM IF_CONNECTION_PASSIVE} IF_CONNECTION_DEMAND = 3; {$EXTERNALSYM IF_CONNECTION_DEMAND}

IF_ADMIN_STATUS_UP = 1; {$EXTERNALSYM IF_ADMIN_STATUS_UP} IF_ADMIN_STATUS_DOWN = 2; {$EXTERNALSYM IF_ADMIN_STATUS_DOWN} IF_ADMIN_STATUS_TESTING = 3; {$EXTERNALSYM IF_ADMIN_STATUS_TESTING}//////////////////////////////////////////////////////////////////////////////// The following are the the operational states for WAN and LAN interfaces. //// The order of the states seems weird, but is done for a purpose. All //// states >= CONNECTED can transmit data right away. States >= DISCONNECTED //// can tx data but some set up might be needed. States < DISCONNECTED can //// not transmit data. //

62

Page 63: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// A card is marked UNREACHABLE if DIM calls InterfaceUnreachable for //// reasons other than failure to connect. //// NON_OPERATIONAL -- Valid for LAN Interfaces. Means the card is not //// working or not plugged in or has no address. //// UNREACHABLE -- Valid for WAN Interfaces. Means the remote site is //// not reachable at this time. //// DISCONNECTED -- Valid for WAN Interfaces. Means the remote site is //// not connected at this time. //// CONNECTING -- Valid for WAN Interfaces. Means a connection attempt //// has been initiated to the remote site. //// CONNECTED -- Valid for WAN Interfaces. Means the remote site is // connected. //// OPERATIONAL -- Valid for LAN Interfaces. Means the card is plugged //// in and working. //// It is the users duty to convert these values to MIB-II values if they //// are to be used by a subagent ////////////////////////////////////////////////////////////////////////////////

IF_OPER_STATUS_NON_OPERATIONAL = 0; {$EXTERNALSYM IF_OPER_STATUS_NON_OPERATIONAL} IF_OPER_STATUS_UNREACHABLE = 1; {$EXTERNALSYM IF_OPER_STATUS_UNREACHABLE} IF_OPER_STATUS_DISCONNECTED = 2; {$EXTERNALSYM IF_OPER_STATUS_DISCONNECTED} IF_OPER_STATUS_CONNECTING = 3; {$EXTERNALSYM IF_OPER_STATUS_CONNECTING} IF_OPER_STATUS_CONNECTED = 4; {$EXTERNALSYM IF_OPER_STATUS_CONNECTED} IF_OPER_STATUS_OPERATIONAL = 5; {$EXTERNALSYM IF_OPER_STATUS_OPERATIONAL} MIB_IF_TYPE_OTHER = 1; {$EXTERNALSYM MIB_IF_TYPE_OTHER} MIB_IF_TYPE_ETHERNET = 6; {$EXTERNALSYM MIB_IF_TYPE_ETHERNET} MIB_IF_TYPE_TOKENRING = 9;

63

Page 64: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM MIB_IF_TYPE_TOKENRING} MIB_IF_TYPE_FDDI = 15; {$EXTERNALSYM MIB_IF_TYPE_FDDI} MIB_IF_TYPE_PPP = 23; {$EXTERNALSYM MIB_IF_TYPE_PPP} MIB_IF_TYPE_LOOPBACK = 24; {$EXTERNALSYM MIB_IF_TYPE_LOOPBACK} MIB_IF_TYPE_SLIP = 28; {$EXTERNALSYM MIB_IF_TYPE_SLIP} MIB_IF_ADMIN_STATUS_UP = 1; {$EXTERNALSYM MIB_IF_ADMIN_STATUS_UP} MIB_IF_ADMIN_STATUS_DOWN = 2; {$EXTERNALSYM MIB_IF_ADMIN_STATUS_DOWN} MIB_IF_ADMIN_STATUS_TESTING = 3; {$EXTERNALSYM MIB_IF_ADMIN_STATUS_TESTING}

MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0; {$EXTERNALSYM MIB_IF_OPER_STATUS_NON_OPERATIONAL} MIB_IF_OPER_STATUS_UNREACHABLE = 1; {$EXTERNALSYM MIB_IF_OPER_STATUS_UNREACHABLE} MIB_IF_OPER_STATUS_DISCONNECTED = 2; {$EXTERNALSYM MIB_IF_OPER_STATUS_DISCONNECTED} MIB_IF_OPER_STATUS_CONNECTING = 3; {$EXTERNALSYM MIB_IF_OPER_STATUS_CONNECTING} MIB_IF_OPER_STATUS_CONNECTED = 4; {$EXTERNALSYM MIB_IF_OPER_STATUS_CONNECTED} MIB_IF_OPER_STATUS_OPERATIONAL = 5; {$EXTERNALSYM MIB_IF_OPER_STATUS_OPERATIONAL}implementationend.

Задание . Исследовать предложенный модуль.unit IpHlpApi;

{$ALIGN ON}{$Z4}interfaceuses Windows, IpExport, IpRtrMib, IpTypes;//////////////////////////////////////////////////////////////////////////////

64

Page 65: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// IPRTRMIB.H has the definitions of the strcutures used to set and get //// information ////////////////////////////////////////////////////////////////////////////////

// #include <iprtrmib.h>// #include <ipexport.h>// #include <iptypes.h>

//////////////////////////////////////////////////////////////////////////////// //// The GetXXXTable APIs take a buffer and a size of buffer. If the buffer // is not large enough, they APIs return ERROR_INSUFFICIENT_BUFFER and //// *pdwSize is the required buffer size //// The bOrder is a BOOLEAN, which if TRUE sorts the table according to // MIB-II (RFC XXXX) ////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////// Retrieves the number of interfaces in the system. These include LAN and // WAN interfaces ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function GetNumberOfInterfaces(var pdwNumIf: DWORD): DWORD; stdcall;{$EXTERNALSYM GetNumberOfInterfaces}

{$ELSE}

var GetNumberOfInterfaces: function (var pdwNumIf: DWORD): DWORD; stdcall; {$EXTERNALSYM GetNumberOfInterfaces}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Gets the MIB-II ifEntry //

65

Page 66: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// The dwIndex field of the MIB_IFROW should be set to the index of the // interface being queried ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function GetIfEntry(pIfRow: PMIB_IFROW): DWORD; stdcall;{$EXTERNALSYM GetIfEntry}

{$ELSE}

var GetIfEntry: function (pIfRow: PMIB_IFROW): DWORD; stdcall; {$EXTERNALSYM GetIfEntry}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Gets the MIB-II IfTable ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function GetIfTable(pIfTable: PMIB_IFTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall;{$EXTERNALSYM GetIfTable}

{$ELSE}

var GetIfTable: function (pIfTable: PMIB_IFTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall; {$EXTERNALSYM GetIfTable}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Gets the Interface to IP Address mapping ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

66

Page 67: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function GetIpAddrTable(pIpAddrTable: PMIB_IPADDRTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall;{$EXTERNALSYM GetIpAddrTable}

{$ELSE}

var GetIpAddrTable: function (pIpAddrTable: PMIB_IPADDRTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall; {$EXTERNALSYM GetIpAddrTable}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Gets the current IP Address to Physical Address (ARP) mapping ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function GetIpNetTable(pIpNetTable: PMIB_IPNETTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall;{$EXTERNALSYM GetIpNetTable}

{$ELSE}

var GetIpNetTable: function (pIpNetTable: PMIB_IPNETTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall; {$EXTERNALSYM GetIpNetTable}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// //// Gets the IP Routing Table (RFX XXXX) //// ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

67

Page 68: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function GetIpForwardTable(pIpForwardTable: PMIB_IPFORWARDTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall;{$EXTERNALSYM GetIpForwardTable}

{$ELSE}

var GetIpForwardTable: function (pIpForwardTable: PMIB_IPFORWARDTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall; {$EXTERNALSYM GetIpForwardTable}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Gets TCP Connection/UDP Listener Table ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function GetTcpTable(pTcpTable: PMIB_TCPTABLE; var pdwSize: DWORD; bOrder: BOOL): DWORD; stdcall;{$EXTERNALSYM GetTcpTable}

function GetUdpTable(pUdpTable: PMIB_UDPTABLE; var pdwSize: DWORD; bOrder: BOOL): DWORD; stdcall;{$EXTERNALSYM GetUdpTable}

{$ELSE}

var GetTcpTable: function (pTcpTable: PMIB_TCPTABLE; var pdwSize: DWORD; bOrder: BOOL): DWORD; stdcall; {$EXTERNALSYM GetTcpTable}

GetUdpTable: function (pUdpTable: PMIB_UDPTABLE; var pdwSize: DWORD; bOrder: BOOL): DWORD; stdcall; {$EXTERNALSYM GetUdpTable}

{$ENDIF}

68

Page 69: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

//////////////////////////////////////////////////////////////////////////////// Gets IP/ICMP/TCP/UDP Statistics ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function GetIpStatistics(var pStats: MIB_IPSTATS): DWORD; stdcall;{$EXTERNALSYM GetIpStatistics}

function GetIcmpStatistics(var pStats: MIB_ICMP): DWORD; stdcall;{$EXTERNALSYM GetIcmpStatistics}

function GetTcpStatistics(var pStats: MIB_TCPSTATS): DWORD; stdcall;{$EXTERNALSYM GetTcpStatistics}function GetUdpStatistics(var pStats: MIB_UDPSTATS): DWORD; stdcall;{$EXTERNALSYM GetUdpStatistics}{$ELSE}

var GetIpStatistics: function (var pStats: MIB_IPSTATS): DWORD; stdcall; {$EXTERNALSYM GetIpStatistics}

GetIcmpStatistics: function (var pStats: MIB_ICMP): DWORD; stdcall; {$EXTERNALSYM GetIcmpStatistics}

GetTcpStatistics: function (var pStats: MIB_TCPSTATS): DWORD; stdcall; {$EXTERNALSYM GetTcpStatistics}

GetUdpStatistics: function (var pStats: MIB_UDPSTATS): DWORD; stdcall; {$EXTERNALSYM GetUdpStatistics}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Used to set the ifAdminStatus on an interface. The only fields of the //// MIB_IFROW that are relevant are the dwIndex (index of the interface // whose status needs to be set) and the dwAdminStatus which can be either

69

Page 70: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// MIB_IF_ADMIN_STATUS_UP or MIB_IF_ADMIN_STATUS_DOWN ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function SetIfEntry(const pIfRow: MIB_IFROW): DWORD; stdcall;{$EXTERNALSYM SetIfEntry}

{$ELSE}

var SetIfEntry: function (const pIfRow: MIB_IFROW): DWORD; stdcall; {$EXTERNALSYM SetIfEntry}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Used to create, modify or delete a route. In all cases the //// dwForwardIfIndex, dwForwardDest, dwForwardMask, dwForwardNextHop and //// dwForwardPolicy MUST BE SPECIFIED. Currently dwForwardPolicy is unused //// and MUST BE 0. //// For a set, the complete MIB_IPFORWARDROW structure must be specified ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function CreateIpForwardEntry(const pRoute: MIB_IPFORWARDROW): DWORD; stdcall;{$EXTERNALSYM CreateIpForwardEntry}

function SetIpForwardEntry(const pRoute: MIB_IPFORWARDROW): DWORD; stdcall;{$EXTERNALSYM SetIpForwardEntry}function DeleteIpForwardEntry(const pRoute: MIB_IPFORWARDROW): DWORD; stdcall;{$EXTERNALSYM DeleteIpForwardEntry}

70

Page 71: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$ELSE}

var CreateIpForwardEntry: function (const pRoute: MIB_IPFORWARDROW): DWORD; stdcall; {$EXTERNALSYM CreateIpForwardEntry} SetIpForwardEntry: function (const pRoute: MIB_IPFORWARDROW): DWORD; stdcall; {$EXTERNALSYM SetIpForwardEntry} DeleteIpForwardEntry: function (const pRoute: MIB_IPFORWARDROW): DWORD; stdcall; {$EXTERNALSYM DeleteIpForwardEntry}{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Used to set the ipForwarding to ON or OFF (currently only ON->OFF is // allowed) and to set the defaultTTL. If only one of the fields needs to //// be modified and the other needs to be the same as before the other field //// needs to be set to MIB_USE_CURRENT_TTL or MIB_USE_CURRENT_FORWARDING as //// the case may be ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function SetIpStatistics(const pIpStats: MIB_IPSTATS): DWORD; stdcall;{$EXTERNALSYM SetIpStatistics}

{$ELSE}

var SetIpStatistics: function (const pIpStats: MIB_IPSTATS): DWORD; stdcall; {$EXTERNALSYM SetIpStatistics}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Used to set the defaultTTL. ////////////////////////////////////////////////////////////////////////////////

71

Page 72: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$IFNDEF IPHLPAPI_DYNLINK}

function SetIpTTL(nTTL: UINT): DWORD; stdcall;{$EXTERNALSYM SetIpTTL}

{$ELSE}

SetIpTTL: function (nTTL: UINT): DWORD; stdcall; {$EXTERNALSYM SetIpTTL}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Used to create, modify or delete an ARP entry. In all cases the dwIndex /// dwAddr field MUST BE SPECIFIED. //// For a set, the complete MIB_IPNETROW structure must be specified //////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function CreateIpNetEntry(const pArpEntry: MIB_IPNETROW): DWORD; stdcall;{$EXTERNALSYM CreateIpNetEntry}

function SetIpNetEntry(const pArpEntry: MIB_IPNETROW): DWORD; stdcall;{$EXTERNALSYM SetIpNetEntry}

function DeleteIpNetEntry(const pArpEntry: MIB_IPNETROW): DWORD; stdcall;{$EXTERNALSYM DeleteIpNetEntry}

function FlushIpNetTable(dwIfIndex: DWORD): DWORD; stdcall;{$EXTERNALSYM FlushIpNetTable}

{$ELSE}

var CreateIpNetEntry: function (const pArpEntry: MIB_IPNETROW): DWORD; stdcall;

72

Page 73: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM CreateIpNetEntry}

SetIpNetEntry: function (const pArpEntry: MIB_IPNETROW): DWORD; stdcall; {$EXTERNALSYM SetIpNetEntry}

DeleteIpNetEntry: function (const pArpEntry: MIB_IPNETROW): DWORD; stdcall; {$EXTERNALSYM DeleteIpNetEntry}

FlushIpNetTable: function (dwIfIndex: DWORD): DWORD; stdcall; {$EXTERNALSYM FlushIpNetTable}

{$ENDIF}

//////////////////////////////////////////////////////////////////////////////// Used to create or delete a Proxy ARP entry. The dwIndex is the index of //// the interface on which to PARP for the dwAddress. If the interface is //// of a type that doesnt support ARP, e.g. PPP, then the call will fail ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function CreateProxyArpEntry(dwAddress, dwMask, dwIfIndex: DWORD): DWORD; stdcall;{$EXTERNALSYM CreateProxyArpEntry}

function DeleteProxyArpEntry(dwAddress, dwMask, dwIfIndex: DWORD): DWORD; stdcall;{$EXTERNALSYM DeleteProxyArpEntry}

{$ELSE}var CreateProxyArpEntry: function (dwAddress, dwMask, dwIfIndex: DWORD): DWORD; stdcall; {$EXTERNALSYM CreateProxyArpEntry}

DeleteProxyArpEntry: function (dwAddress, dwMask, dwIfIndex: DWORD): DWORD; stdcall; {$EXTERNALSYM DeleteProxyArpEntry}

73

Page 74: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$ENDIF}//////////////////////////////////////////////////////////////////////////////// Used to set the state of a TCP Connection. The only state that it can be //// set to is MIB_TCP_STATE_DELETE_TCB. The complete MIB_TCPROW structure //// MUST BE SPECIFIED ////////////////////////////////////////////////////////////////////////////////

{$IFNDEF IPHLPAPI_DYNLINK}

function SetTcpEntry(const pTcpRow: MIB_TCPROW): DWORD; stdcall;{$EXTERNALSYM SetTcpEntry}

function GetInterfaceInfo(pIfTable: PIP_INTERFACE_INFO; var dwOutBufLen: ULONG): DWORD; stdcall;{$EXTERNALSYM GetInterfaceInfo}

function GetUniDirectionalAdapterInfo(pIPIfInfo: PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS; var dwOutBufLen: ULONG): DWORD; stdcall;{$EXTERNALSYM GetUniDirectionalAdapterInfo(OUT PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo}{$ELSE}

var SetTcpEntry: function (const pTcpRow: MIB_TCPROW): DWORD; stdcall; {$EXTERNALSYM SetTcpEntry} GetInterfaceInfo: function (pIfTable: PIP_INTERFACE_INFO; var dwOutBufLen: ULONG): DWORD; stdcall; {$EXTERNALSYM GetInterfaceInfo} GetUniDirectionalAdapterInfo: function (pIPIfInfo: PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS; var dwOutBufLen: ULONG): DWORD; stdcall; {$EXTERNALSYM GetUniDirectionalAdapterInfo(OUT PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo}{$ENDIF}//////////////////////////////////////////////////////////////////////////////// //

74

Page 75: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// Gets the "best" outgoing interface for the specified destination address //// ////////////////////////////////////////////////////////////////////////////////{$IFNDEF IPHLPAPI_DYNLINK}function GetBestInterface(dwDestAddr: IPAddr; var pdwBestIfIndex: DWORD): DWORD; stdcall;{$EXTERNALSYM GetBestInterface}

{$ELSE}var GetBestInterface: function (dwDestAddr: IPAddr; var pdwBestIfIndex: DWORD): DWORD; stdcall; {$EXTERNALSYM GetBestInterface}{$ENDIF}//////////////////////////////////////////////////////////////////////////////// Gets the best (longest matching prefix) route for the given destination //// If the source address is also specified (i.e. is not 0x00000000), and //// there are multiple "best" routes to the given destination, the returned //// route will be one that goes out over the interface which has an address //// that matches the source address ////////////////////////////////////////////////////////////////////////////////{$IFNDEF IPHLPAPI_DYNLINK}function GetBestRoute(dwDestAddr, dwSourceAddr: DWORD; pBestRoute: PMIB_IPFORWARDROW): DWORD; stdcall;{$EXTERNALSYM GetBestRoute}

function NotifyAddrChange(var Handle: THandle; overlapped: POVERLAPPED): DWORD; stdcall;{$EXTERNALSYM NotifyAddrChange}

function NotifyRouteChange(var Handle: THandle; overlapped: POVERLAPPED): DWORD; stdcall;{$EXTERNALSYM NotifyRouteChange}

function GetAdapterIndex(AdapterName: LPWSTR; var IfIndex: ULONG): DWORD; stdcall;{$EXTERNALSYM GetAdapterIndex}

function AddIPAddress(Address: IPAddr; IpMask: IPMask; IfIndex: DWORD; var NTEContext, NTEInstance: ULONG): DWORD; stdcall;

75

Page 76: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$EXTERNALSYM AddIPAddress}

function DeleteIPAddress(NTEContext: ULONG): DWORD; stdcall;{$EXTERNALSYM DeleteIPAddress}

function GetNetworkParams(pFixedInfo: PFIXED_INFO; var pOutBufLen: ULONG): DWORD; stdcall;{$EXTERNALSYM GetNetworkParams}

function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall;{$EXTERNALSYM GetAdaptersInfo}

function GetPerAdapterInfo(IfIndex: ULONG; pPerAdapterInfo: PIP_PER_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall;{$EXTERNALSYM GetPerAdapterInfo}

function IpReleaseAddress(const AdapterInfo: IP_ADAPTER_INDEX_MAP): DWORD; stdcall;{$EXTERNALSYM IpReleaseAddress}

function IpRenewAddress(const AdapterInfo: IP_ADAPTER_INDEX_MAP): DWORD; stdcall;{$EXTERNALSYM IpRenewAddress}

function SendARP(const DestIP, SrcIP: IPAddr; pMacAddr: PULONG; var PhyAddrLen: ULONG): DWORD; stdcall;{$EXTERNALSYM SendARP}

function GetRTTAndHopCount(DestIpAddress: IPAddr; var HopCount: ULONG; MaxHops: ULONG; var RTT: ULONG): BOOL; stdcall;{$EXTERNALSYM GetRTTAndHopCount}

function GetFriendlyIfIndex(IfIndex: DWORD): DWORD; stdcall;{$EXTERNALSYM GetFriendlyIfIndex}

function EnableRouter(var pHandle: THandle; pOverlapped: POVERLAPPED): DWORD; stdcall;{$EXTERNALSYM EnableRouter}

76

Page 77: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function UnenableRouter(pOverlapped: POVERLAPPED; lpdwEnableCount: LPDWORD): DWORD; stdcall;{$EXTERNALSYM UnenableRouter}

{$ELSE}

var GetBestRoute: function (dwDestAddr, dwSourceAddr: DWORD; pBestRoute: PMIB_IPFORWARDROW): DWORD; stdcall; {$EXTERNALSYM GetBestRoute}

NotifyAddrChange: function (var Handle: THandle; overlapped: POVERLAPPED): DWORD; stdcall; {$EXTERNALSYM NotifyAddrChange}

NotifyRouteChange: function (var Handle: THandle; overlapped: POVERLAPPED): DWORD; stdcall; {$EXTERNALSYM NotifyRouteChange}

GetAdapterIndex: function (AdapterName: LPWSTR; var IfIndex: ULONG): DWORD; stdcall; {$EXTERNALSYM GetAdapterIndex}

AddIPAddress: function (Address: IPAddr; IpMask: IPMask; IfIndex: DWORD; var NTEContext, NTEInstance: ULONG): DWORD; stdcall; {$EXTERNALSYM AddIPAddress}

DeleteIPAddress: function (NTEContext: ULONG): DWORD; stdcall; {$EXTERNALSYM DeleteIPAddress}

GetNetworkParams: function (pFixedInfo: PFIXED_INFO; var pOutBufLen: ULONG): DWORD; stdcall; {$EXTERNALSYM GetNetworkParams}

GetAdaptersInfo: function (pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall; {$EXTERNALSYM GetAdaptersInfo}

77

Page 78: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

GetPerAdapterInfo: function (IfIndex: ULONG; pPerAdapterInfo: PIP_PER_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall; {$EXTERNALSYM GetPerAdapterInfo}

IpReleaseAddress: function (const AdapterInfo: IP_ADAPTER_INDEX_MAP): DWORD; stdcall; {$EXTERNALSYM IpReleaseAddress}

IpRenewAddress: function (const AdapterInfo: IP_ADAPTER_INDEX_MAP): DWORD; stdcall; {$EXTERNALSYM IpRenewAddress}

SendARP: function (const DestIP, SrcIP: IPAddr; pMacAddr: PULONG; var PhyAddrLen: ULONG): DWORD; stdcall; {$EXTERNALSYM SendARP}

GetRTTAndHopCount: function (DestIpAddress: IPAddr; var HopCount: ULONG; MaxHops: ULONG; var RTT: ULONG): BOOL; stdcall; {$EXTERNALSYM GetRTTAndHopCount}

GetFriendlyIfIndex: function (IfIndex: DWORD): DWORD; stdcall; {$EXTERNALSYM GetFriendlyIfIndex}

EnableRouter: function (var pHandle: THandle; pOverlapped: POVERLAPPED): DWORD; stdcall; {$EXTERNALSYM EnableRouter}

UnenableRouter: function (pOverlapped: POVERLAPPED; lpdwEnableCount: LPDWORD): DWORD; stdcall; {$EXTERNALSYM UnenableRouter}

{$ENDIF}

{$IFDEF IPHLPAPI_LINKONREQUEST}

function IpHlpApiInitAPI: Boolean;procedure IpHlpApiFreeAPI;

{$ENDIF}

78

Page 79: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function IpHlpApiCheckAPI: Boolean;

implementation

const iphlpapilib = 'iphlpapi.dll';

{$IFNDEF IPHLPAPI_DYNLINK}

function GetNumberOfInterfaces; external iphlpapilib name 'GetNumberOfInterfaces';function GetIfEntry; external iphlpapilib name 'GetIfEntry';function GetIfTable; external iphlpapilib name 'GetIfTable';function GetIpAddrTable; external iphlpapilib name 'GetIpAddrTable';function GetIpNetTable; external iphlpapilib name 'GetIpNetTable';function GetIpForwardTable; external iphlpapilib name 'GetIpForwardTable';function GetTcpTable; external iphlpapilib name 'GetTcpTable';function GetUdpTable; external iphlpapilib name 'GetUdpTable';

function GetIpStatistics; external iphlpapilib name 'GetIpStatistics';function GetIcmpStatistics; external iphlpapilib name 'GetIcmpStatistics';function GetTcpStatistics; external iphlpapilib name 'GetTcpStatistics';function GetUdpStatistics; external iphlpapilib name 'GetUdpStatistics';function SetIfEntry; external iphlpapilib name 'SetIfEntry';function CreateIpForwardEntry; external iphlpapilib name 'CreateIpForwardEntry';function SetIpForwardEntry; external iphlpapilib name 'SetIpForwardEntry';function DeleteIpForwardEntry; external iphlpapilib name 'DeleteIpForwardEntry';function SetIpStatistics; external iphlpapilib name 'SetIpStatistics';function SetIpTTL; external iphlpapilib name 'SetIpTTL';function CreateIpNetEntry; external iphlpapilib name 'CreateIpNetEntry';function SetIpNetEntry; external iphlpapilib name 'SetIpNetEntry';function DeleteIpNetEntry; external iphlpapilib name 'DeleteIpNetEntry';function FlushIpNetTable; external iphlpapilib name 'FlushIpNetTable';function CreateProxyArpEntry; external iphlpapilib name 'CreateProxyArpEntry';

79

Page 80: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function DeleteProxyArpEntry; external iphlpapilib name 'DeleteProxyArpEntry';function SetTcpEntry; external iphlpapilib name 'SetTcpEntry';function GetInterfaceInfo; external iphlpapilib name 'GetInterfaceInfo';function GetUniDirectionalAdapterInfo; external iphlpapilib name 'GetUniDirectionalAdapterInfo';function GetBestInterface; external iphlpapilib name 'GetBestInterface';function GetBestRoute; external iphlpapilib name 'GetBestRoute';function NotifyAddrChange; external iphlpapilib name 'NotifyAddrChange';function NotifyRouteChange; external iphlpapilib name 'NotifyRouteChange';function GetAdapterIndex; external iphlpapilib name 'GetAdapterIndex';function AddIPAddress; external iphlpapilib name 'AddIPAddress';function DeleteIPAddress; external iphlpapilib name 'DeleteIPAddress';function GetNetworkParams; external iphlpapilib name 'GetNetworkParams';function GetAdaptersInfo; external iphlpapilib name 'GetAdaptersInfo';function GetPerAdapterInfo; external iphlpapilib name 'GetPerAdapterInfo';function IpReleaseAddress; external iphlpapilib name 'IpReleaseAddress';function IpRenewAddress; external iphlpapilib name 'IpRenewAddress';function SendARP; external iphlpapilib name 'SendARP';function GetRTTAndHopCount; external iphlpapilib name 'GetRTTAndHopCount';function GetFriendlyIfIndex; external iphlpapilib name 'GetFriendlyIfIndex';function EnableRouter; external iphlpapilib name 'EnableRouter';function UnenableRouter; external iphlpapilib name 'UnenableRouter';

{$ELSE}

var HIpHlpApi: THandle = 0;

function IpHlpApiInitAPI: Boolean;begin Result := False; if HIphlpapi = 0 then HIpHlpApi := LoadLibrary(iphlpapilib); if HIpHlpApi > HINSTANCE_ERROR then begin

80

Page 81: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

@GetNetworkParams := GetProcAddress(HIpHlpApi, 'GetNetworkParams'); @GetAdaptersInfo := GetProcAddress(HIpHlpApi, 'GetAdaptersInfo'); @GetPerAdapterInfo := GetProcAddress(HIpHlpApi, 'GetPerAdapterInfo'); @GetAdapterIndex := GetProcAddress(HIpHlpApi, 'GetAdapterIndex'); @GetUniDirectionalAdapterInfo := GetProcAddress(HIpHlpApi, 'GetUniDirectionalAdapterInfo'); @GetNumberOfInterfaces := GetProcAddress(HIpHlpApi, 'GetNumberOfInterfaces'); @GetInterfaceInfo := GetProcAddress(HIpHlpApi, 'GetInterfaceInfo'); @GetFriendlyIfIndex := GetProcAddress(HIpHlpApi, 'GetFriendlyIfIndex'); @GetIfTable := GetProcAddress(HIpHlpApi, 'GetIfTable'); @GetIfEntry := GetProcAddress(HIpHlpApi, 'GetIfEntry'); @SetIfEntry := GetProcAddress(HIpHlpApi, 'SetIfEntry'); @GetIpAddrTable := GetProcAddress(HIpHlpApi, 'GetIpAddrTable'); @AddIPAddress := GetProcAddress(HIpHlpApi, 'AddIPAddress'); @DeleteIPAddress := GetProcAddress(HIpHlpApi, 'DeleteIPAddress'); @IpReleaseAddress := GetProcAddress(HIpHlpApi, 'IpReleaseAddress'); @IpRenewAddress := GetProcAddress(HIpHlpApi, 'IpRenewAddress'); @GetIpNetTable := GetProcAddress(HIpHlpApi, 'GetIpNetTable'); @CreateIpNetEntry := GetProcAddress(HIpHlpApi, 'CreateIpNetEntry'); @DeleteIpNetEntry := GetProcAddress(HIpHlpApi, 'DeleteIpNetEntry'); @CreateProxyArpEntry := GetProcAddress(HIpHlpApi, 'CreateProxyArpEntry'); @DeleteProxyArpEntry := GetProcAddress(HIpHlpApi, 'DeleteProxyArpEntry'); @SendARP := GetProcAddress(HIpHlpApi, 'SendARP'); @GetIpStatistics := GetProcAddress(HIpHlpApi, 'GetIpStatistics'); @GetIcmpStatistics := GetProcAddress(HIpHlpApi, 'GetIcmpStatistics'); @SetIpStatistics := GetProcAddress(HIpHlpApi, 'SetIpStatistics'); @SetIpTTL := GetProcAddress(HIpHlpApi, 'SetIpTTL'); @GetIpForwardTable := GetProcAddress(HIpHlpApi,'GetIpForwardTable'); @CreateIpForwardEntry := GetProcAddress(HIpHlpApi, 'CreateIpForwardEntry');

81

Page 82: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

@GetTcpTable := GetProcAddress(HIpHlpApi, 'GetTcpTable'); @GetUdpTable := GetProcAddress(HIpHlpApi, 'GetUdpTable'); @GetTcpStatistics := GetProcAddress(HIpHlpApi, 'GetTcpStatistics'); @GetUdpStatistics := GetProcAddress(HIpHlpApi, 'GetUdpStatistics'); @SetIpForwardEntry := GetProcAddress(HIpHlpApi, 'SetIpForwardEntry'); @DeleteIpForwardEntry := GetProcAddress(HIpHlpApi, 'DeleteIpForwardEntry'); @SetIpNetEntry := GetProcAddress(HIpHlpApi, 'SetIpNetEntry'); @SetTcpEntry := GetProcAddress(HIpHlpApi, 'SetTcpEntry'); @GetBestRoute := GetProcAddress(HIpHlpApi, 'GetBestRoute'); @NotifyAddrChange := GetProcAddress(HIpHlpApi, 'NotifyAddrChange'); @NotifyRouteChange := GetProcAddress(HIpHlpApi, 'NotifyRouteChange'); @GetBestInterface := GetProcAddress(HIpHlpApi, 'GetBestInterface'); @GetRTTAndHopCount := GetProcAddress(HIpHlpApi, 'GetRTTAndHopCount'); @EnableRouter := GetProcAddress(HIpHlpApi, 'EnableRouter'); @UnenableRouter := GetProcAddress(HIpHlpApi, 'UnenableRouter'); Result := True; end;end;procedure IpHlpApiFreeAPI;begin if HIpHlpApi <> 0 then FreeLibrary(HIpHlpApi); HIpHlpApi := 0;end;{$ENDIF}

function IpHlpApiCheckAPI: Boolean;begin {$IFDEF IPHLPAPI_DYNLINK} Result := HIpHlpApi <> 0; {$ELSE} Result := True; {$ENDIF}end;

initialization

82

Page 83: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$IFDEF IPHLPAPI_DYNLINK} {$IFNDEF IPHLPAPI_LINKONREQUEST} IpHlpApiInitAPI; {$ENDIF} {$ENDIF}

finalization

{$IFDEF IPHLPAPI_DYNLINK} IpHlpApiFreeAPI; {$ENDIF}end.

Задание Исследовать модуль получение информации о сетевом устройстве и работа с NetBios.

unit Nb;{$F+}{ nb.pas 16/32 bit windows netbios access (follows IBM's Netbios 3.0 spec) (C) CEVI VZW - 29 april 1998 -- DH ([email protected]) -- You can (ab)use this code as you like, but please do not remove the credits. I used reference material from IBM, Microsoft, Syntax and Byte when I wrote the 16-bit (DOS) c-version ages ago (in Borland Turbo C 2.0 on a 386SX PC) with a Syntax SMB server running on Interactive Unix. I now converted this to 16 and 32 bit Delphi code.}interfaceuses SysUtils, Winprocs, Wintypes;const{ size of a netbios name } NBNAMESIZE = 16;{ max number of network adapters }{ remeber it's BIG Blue, right ? } MAXLANAS = 254;{ NCB Command codes } NCB_ASYNC = $80; { asynch command bit to be or-ed into command } NCB_CALL = $10; { open a session } NCB_LISTEN = $11; { wait for a call }

83

Page 84: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

NCB_HANGUP = $12; { end session } NCB_SEND = $14; { send data } NCB_RECV = $15; { receive data } NCB_RECVANY = $16; { receive data on any session } NCB_CHAINSEND = $17; { chain send data } NCB_DGSEND = $20; { send a datagram } NCB_DGRECV = $21; { receive datagram } NCB_DGSENDBC = $22; { send broadcast datagram } NCB_DGREVCBC = $23; { receive broadcast datagram } NCB_ADDNAME = $30; { add unique name to local table } NCB_DELNAME = $31; { delete name from local table } NCB_RESET = $32; { reset adapter } NCB_ADPSTAT = $33; { adapter status } NCB_SSTAT = $34; { session status } NCB_CANCEL = $35; { cancel NCB request } NCB_ADDGRPNAME= $36; { add group name to local table } NCB_ENUM = $37; { enum adapters } NCB_UNLINK = $70; { unlink remote boot code } NCB_SENDNA = $71; { send, don't wait for ACK } NCB_CHAINSENDNA=$72; { chain send, but don't wait for ACK } NCB_LANSTALERT= $73; { lan status alert } NCB_ACTION = $77; { enable extensions } NCB_FINDNAME = $78; { search for name on the network } NCB_TRACE = $79; { activate / stop tracing }{ NCB return codes } NRC_GOODRET = $00; { good return also returned when ASYNCH request accepted } NRC_BUFLEN = $01; { illegal buffer length } NRC_ILLCMD = $03; { illegal command } NRC_CMDTMO = $05; { command timed out } NRC_INCOMP = $06; { message incomplete, issue another command } NRC_BADDR = $07; { illegal buffer address } NRC_SNUMOUT = $08; { session number out of range } NRC_NORES = $09; { no resource available } NRC_SCLOSED = $0a; { session closed } NRC_CMDCAN = $0b; { command cancelled } NRC_DUPNAME = $0d; { duplicate name } NRC_NAMTFUL = $0e; { name table full } NRC_ACTSES = $0f; { no deletions, name has active sessions } NRC_LOCTFUL = $11; { local session table full }

84

Page 85: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

NRC_REMTFUL = $12; { remote session table full } NRC_ILLNN = $13; { illegal name number } NRC_NOCALL = $14; { no callname } NRC_NOWILD = $15; { cannot put * in NCB_NAME } NRC_INUSE = $16; { name in use on remote adapter } NRC_NAMERR = $17; { name deleted } NRC_SABORT = $18; { session ended abnormally } NRC_NAMCONF = $19; { name conflict detected } NRC_IFBUSY = $21; { interface busy, IRET before retrying } NRC_TOOMANY = $22; { too many commands outstanding, retry later } NRC_BRIDGE = $23; { ncb_lana_num field invalid } NRC_CANOCCR = $24; { command completed while cancel occurring } NRC_CANCEL = $26; { command not valid to cancel } NRC_DUPENV = $30; { name defined by anther local process } NRC_ENVNOTDEF = $34; { environment undefined. RESET required } NRC_OSRESNOTAV = $35; { required OS resources exhausted } NRC_MAXAPPS = $36; { max number of applications exceeded } NRC_NOSAPS = $37; { no saps available for netbios } NRC_NORESOURCES = $38; { requested resources are not available } NRC_INVADDRESS = $39; { invalid ncb address or length > segment } NRC_INVDDID = $3B; { invalid NCB DDID } NRC_LOCKFAIL = $3C; { lock of user area failed } NRC_OPENERR = $3f; { NETBIOS not loaded } NRC_SYSTEM = $40; { system error } NRC_PENDING = $ff; { asynchronous command is not yet finished }{ Values for transport_id } ALL_TRANSPORTS = 'M'#$00#$00#$00; MS_NBF = 'MNBF';{ values for name_flags bits. } NAME_FLAGS_MASK = $87; GROUP_NAME = $80; UNIQUE_NAME = $00; REGISTERING = $00;

85

Page 86: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

REGISTERED = $04; DEREGISTERED = $05; DUPLICATE = $06; DUPLICATE_DEREG = $07;{ Values for state }

LISTEN_OUTSTANDING = $01; CALL_PENDING = $02; SESSION_ESTABLISHED = $03; HANGUP_PENDING = $04; HANGUP_COMPLETE = $05; SESSION_ABORTED = $06;

type{ Netbios Name } TNBName = array[0..(NBNAMESIZE - 1)] of byte;

{ MAC address } TMacAddress = array[0..5] of byte;

PNCB = ^TNCB;

{ Netbios Control Block }

{$IFDEF WIN32} TNCBPostProc = procedure(P: PNCB); {$ENDIF}

TNCB = packed record { Netbios Control Block } Command: byte; { command code } RetCode: byte; { return code } LSN: byte; { local session number } Num: byte; { name number } Buf: ^byte; { data buffer } Length: word; { data length } CallName: TNBName; { name to call } Name: TNBName; { our own name } RTO: byte; { receive time-out } STO: byte; { send time-out } {$IFNDEF WIN32} Post_Offs:word; { asynch notification routine offset }

86

Page 87: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Post_Seg: word; { asynch notification routine segment} {$ELSE} PostPrc: TNCBPostProc;{ asynch notification routine (nb30) } {$ENDIF} Lana_Num: byte; { adapter number } Cmd_Cplt: byte; { command completion flag } {$IFDEF WIN32} Reserved: array[0..9] of byte; { Reserverd for Bios use } Event: THandle; { WIN32 event handle to be signalled } { for asynch cmd completion } {$ELSE} Reserved: array[0..13] of byte; { Reserved } {$ENDIF} end;

{ Netbios Name Info record } PNameInfo = ^TNameInfo; TNameInfo = packed record { name info record } Name: TNBName; { netbios name } NameNum:byte; { name number } NameSt: byte; { name status } end;

{ Netbios adapter status } PAdpStat = ^TAdpStat; TAdpStat = packed record { adapter status record} ID: TMacAddress; { adapter mac address } VMajor: byte; { software version major number } Resvd0: byte; AdpType: byte; { adapter type } VMinor: byte; { software version minor number } RptTime: word; { reporting time period } RcvCRC: word; { receive crc errors } RcvOth: word; { receive other errors } TxmCol: word; { transmit collisions } TxmOth: word; { transmit other errors } TxmOK: LongInt; { successfull transmissions } RcvOK: LongInt; { successfull receives } TxmRetr: word; { transmit retries } NoRcvBuf: word; { number of 'no receive buffer' }

87

Page 88: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

T1_tmo: word; { t1 time-outs } Ti_tmo: word; { ti time_outs } Resvd1: LongInt; Free_Ncbs:word; { number of free ncb's } Cfg_Ncbs: word; { number of configured ncb's } max_Ncbs: word; { max ncb's used } NoTxmBuf: word; { number of 'no transmit buffer'} MaxDGSize:word; { max. datagram size } Pend_Ses: word; { number of pending sessions } Cfg_Ses: word; { number of configured sessions } Max_Ses: word; { max sessions used } Max_SPSz: word; { max. session packet size } nNames: word; { number of names in local table} Names: array[0..15] of TnameInfo; { local name table } end;

{ Structure returned to the NCB command NCBSSTAT is SESSION_HEADER followed by an array of SESSION_BUFFER structures. If the NCB_NAME starts with an asterisk then an array of these structures is returned containing the status for all names.}

{ session header } PSession_Header = ^TSession_Header; TSession_Header = packed record sess_name: byte; num_sess: byte; rcv_dg_outstanding: byte; rcv_any_outstanding: byte; end;

{ session buffer } PSession_Buffer = ^TSession_Buffer; TSession_Buffer = packed record lsn: byte; state: byte; local_name: TNBName;

88

Page 89: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

remote_name: TNBName; rcvs_outstanding: byte; sends_outstanding: byte; end;

{ Structure returned to the NCB command NCBENUM.

On a system containing lana's 0, 2 and 3, a structure with length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned.} PLana_Enum = ^TLana_Enum; TLANA_ENUM = packed record length: byte; { Number of valid entries in lana[] } lana: array[0..(MAXLANAS - 1)] of byte; end;

{ Structure returned to the NCB command NCBFINDNAME is FIND_NAME_HEADER followed by an array of FIND_NAME_BUFFER structures. }

PFind_Name_Header = ^TFind_Name_Header; TFind_Name_Header = packed record node_count: word; reserved: byte; unique_group: byte; end;

PFind_Name_Buffer = ^TFind_Name_Buffer; TFind_Name_Buffer = packed record length: byte; access_control: byte; frame_control: byte; destination_addr:TMacAddress; source_addr: TMacAddress; routing_info: array[0..17] of byte; end;

89

Page 90: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{ Structure provided with NCBACTION. The purpose of NCBACTION is to provide transport specific extensions to netbios. }

PAction_Header = ^TAction_Header; TAction_Header = packed record transport_id: LongInt; action_code: Word; reserved: Word; end;

{$IFDEF WIN32} function Netbios(P: PNCB): Char; stdcall;{$ENDIF}

{ Exposed functions }

function NetbiosCmd(var NCB: TNCB): Word;

implementation

{$IFDEF WIN32}function Netbios; external 'netapi32.dll' name 'Netbios';{$ENDIF}

{---------------------------------}{ execute a Windows Netbios Call }{---------------------------------}

function NetbiosCmd(var NCB: TNCB): Word;begin{$IFNDEF WIN32} asm push bp { save bp } push ss { save ss }

90

Page 91: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

push ds { save ds } les bx, NCB { get segment/offset address of NCB } call NetBiosCall; { 16 bit Windows Netbios call } xor ah,ah mov @Result, ax { store return code } pop ds { restore ds } pop ss { restore ss } pop bp { restore bp } end;{$ELSE} Result := Word(Netbios(PNCB(@NCB))); { 32 bit Windows Netbios call }{$ENDIF}end;end.

unit Unit1;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, nb;

type TForm1 = class(TForm) Button1: TButton; NetBIOSLabel: TLabel; Edit1: TEdit; Label2: TLabel; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } function NbGetMacAddr(Name:String; LanaNum: Integer): String; function NbLanaEnum: TLana_Enum; function NbReset(l: Byte): Word; public { Public declarations } end;

91

Page 92: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);var L_Enum : TLana_Enum; i:Integer;begin L_Enum := NbLanaEnum; for i := 0 to (L_Enum.Length - 1)do begin NbReset(L_Enum.Lana[i]); NetBIOSLabel.Caption:=NbGetMacAddr(Edit1.Text,i); if NetBIOSLabel.Caption<>'?' then break; end;end;

function TForm1.NbGetMacAddr(Name: String; LanaNum: Integer): String;var NCB: TNCB; AdpStat: TAdpStat; RetCode: Word; i:Integer;begin FillChar(NCB, SizeOf(NCB), 0); FillChar(AdpStat, SizeOf(AdpStat), 0); NCB.Command := NCB_ADPSTAT; NCB.Buf := @AdpStat; NCB.Length := Sizeof(AdpStat); FillChar(NCB.CallName, Sizeof(TNBName), $20);// NCB.CallName[0] := Byte('*');

for i:=0 to Length(Name)-1 do NCB.CallName[i] := Byte(Name[i+1]); NCB.Lana_Num := LanaNum;

92

Page 93: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

RetCode := NetBiosCmd(NCB); if RetCode = NRC_GOODRET then begin Result := Format('%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x', [AdpStat.ID[0], AdpStat.ID[1], AdpStat.ID[2],AdpStat.ID[3], AdpStat.ID[4], AdpStat.ID[5]]); end else begin Result := '?'; end;end;

function TForm1.NbLanaEnum: TLana_Enum;var NCB: TNCB; L_Enum: TLana_Enum; RetCode: Word;begin FillChar(NCB, SizeOf(NCB), 0); FillChar(L_Enum, SizeOf(TLana_Enum), 0); NCB.Command := NCB_ENUM; NCB.Buf := @L_Enum; NCB.Length := Sizeof(L_Enum); RetCode := NetBiosCmd(NCB); if RetCode <> NRC_GOODRET then begin L_Enum.Length := 0; L_Enum.Lana[0] := Byte(RetCode); end; Result := L_Enum;end;

function TForm1.NbReset(l: Byte): Word;var NCB: TNCB;begin FillChar(NCB, SizeOf(NCB), 0); NCB.Command := NCB_RESET; NCB.Lana_Num := l; Result := NetBiosCmd(NCB);

93

Page 94: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

end;end.

Задание Исследовать предложеный модуль WinSock2.

unit WinSock2;

interfaceuses SysUtils, Windows;{$ALIGN OFF}{$RANGECHECKS OFF}{$WRITEABLECONST OFF}// Define the current Winsock version. To build an earlier Winsock version// application redefine this value prior to including Winsock2.hconst WINSOCK_VERSION = $0202; WINSOCK2_DLL = 'ws2_32.dll';type u_char = char; u_short = Word; u_int = DWORD; u_long = DWORD;// The new type to be used in all instances which refer to sockets. TSocket = u_int; WSAEVENT = THandle; PWSAEVENT = ^WSAEVENT; LPWSAEVENT = PWSAEVENT;{$IFDEF UNICODE} PMBChar = PWideChar;{$ELSE} PMBChar = PChar;{$ENDIF}const FD_SETSIZE = 64;type PFDSet = ^TFDSet; TFDSet = packed record fd_count: u_int; fd_array: array[0..FD_SETSIZE-1] of TSocket;

94

Page 95: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

end; PTimeVal = ^TTimeVal; TTimeVal = packed record tv_sec: Longint; tv_usec: Longint; end;const IOCPARM_MASK = $7f; IOC_VOID = $20000000; IOC_OUT = $40000000; IOC_IN = $80000000; IOC_INOUT = (IOC_IN or IOC_OUT);// get # bytes to read FIONREAD = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('f') shl 8) or 127;// set/clear non-blocking i/o FIONBIO = IOC_IN or (SizeOf(Longint) shl 16) or (Ord('f') shl 8) or 126;// set/clear async i/o FIOASYNC = IOC_IN or (SizeOf(Longint) shl 16) or (Ord('f') shl 8) or 125;// Socket I/O Controls// set high watermark SIOCSHIWAT = IOC_IN or (SizeOf(Longint) shl 16) or (Ord('s') shl 8);// get high watermark SIOCGHIWAT = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('s') shl 8) or 1;// set low watermark SIOCSLOWAT = IOC_IN or (SizeOf(Longint) shl 16) or (Ord('s') shl 8) or 2;// get low watermark SIOCGLOWAT = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('s') shl 8) or 3;// at oob mark? SIOCATMARK = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('s') shl 8) or 7;// Structures returned by network data base library, taken from the// BSD file netdb.h. All addresses are supplied in host order, and// returned in network order (suitable for use in system calls).type

95

Page 96: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

PHostEnt = ^THostEnt; THostEnt = packed record h_name: PChar; // official name of host h_aliases: ^PChar; // alias list h_addrtype: Smallint; // host address type h_length: Smallint; // length of address case Byte of 0: (h_addr_list: ^PChar); // list of addresses 1: (h_addr: ^PChar); // address, for backward compat end;// It is assumed here that a network number// fits in 32 bits. PNetEnt = ^TNetEnt; TNetEnt = packed record n_name: PChar; // official name of net n_aliases: ^PChar; // alias list n_addrtype: Smallint; // net address type n_net: u_long; // network # end; PServEnt = ^TServEnt; TServEnt = packed record s_name: PChar; // official service name s_aliases: ^PChar; // alias list s_port: Smallint; // protocol to use s_proto: PChar; // port # end; PProtoEnt = ^TProtoEnt; TProtoEnt = packed record p_name: PChar; // official protocol name p_aliases: ^Pchar; // alias list p_proto: Smallint; // protocol # end;// Constants and structures defined by the internet system,// Per RFC 790, September 1981, taken from the BSD file netinet/in.h.const// Protocols IPPROTO_IP = 0; // dummy for IP IPPROTO_ICMP = 1; // control message protocol IPPROTO_IGMP = 2; // group management protocol IPPROTO_GGP = 3; // gateway^2 (deprecated) IPPROTO_TCP = 6; // TCP

96

Page 97: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

IPPROTO_PUP = 12; // pup IPPROTO_UDP = 17; // UDP - user datagram protocol IPPROTO_IDP = 22; // xns idp IPPROTO_ND = 77; // UNOFFICIAL net disk proto IPPROTO_RAW = 255; // raw IP packet IPPROTO_MAX = 256;// Port/socket numbers: network standard functions IPPORT_ECHO = 7; IPPORT_DISCARD = 9; IPPORT_SYSTAT = 11; IPPORT_DAYTIME = 13; IPPORT_NETSTAT = 15; IPPORT_FTP = 21; IPPORT_TELNET = 23; IPPORT_SMTP = 25; IPPORT_TIMESERVER = 37; IPPORT_NAMESERVER = 42; IPPORT_WHOIS = 43; IPPORT_MTP = 57;// Port/socket numbers: host specific functions IPPORT_TFTP = 69; IPPORT_RJE = 77; IPPORT_FINGER = 79; IPPORT_TTYLINK = 87; IPPORT_SUPDUP = 95;// UNIX TCP sockets IPPORT_EXECSERVER = 512; IPPORT_LOGINSERVER = 513; IPPORT_CMDSERVER = 514; IPPORT_EFSSERVER = 520;

// UNIX UDP sockets IPPORT_BIFFUDP = 512; IPPORT_WHOSERVER = 513; IPPORT_ROUTESERVER = 520;// Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root). IPPORT_RESERVED =1024;// Link numbers IMPLINK_IP = 155; IMPLINK_LOWEXPER = 156;

97

Page 98: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

IMPLINK_HIGHEXPER = 158;

TF_DISCONNECT = $01; TF_REUSE_SOCKET = $02; TF_WRITE_BEHIND = $04;// This is used instead of -1, since the TSocket type is unsigned. INVALID_SOCKET = TSocket(not(0)); SOCKET_ERROR = -1;// The following may be used in place of the address family, socket type, or// protocol in a call to WSASocket to indicate that the corresponding value// should be taken from the supplied WSAPROTOCOL_INFO structure instead of the// parameter itself. FROM_PROTOCOL_INFO = -1;// Types SOCK_STREAM = 1; { stream socket } SOCK_DGRAM = 2; { datagram socket } SOCK_RAW = 3; { raw-protocol interface } SOCK_RDM = 4; { reliably-delivered message } SOCK_SEQPACKET = 5; { sequenced packet stream }

// Option flags per-socket. SO_DEBUG = $0001; // turn on debugging info recording SO_ACCEPTCONN = $0002; // socket has had listen() SO_REUSEADDR = $0004; // allow local address reuse SO_KEEPALIVE = $0008; // keep connections alive SO_DONTROUTE = $0010; // just use interface addresses SO_BROADCAST = $0020; // permit sending of broadcast msgs SO_USELOOPBACK = $0040; // bypass hardware when possible SO_LINGER = $0080; // linger on close if data present SO_OOBINLINE = $0100; // leave received OOB data in line

SO_DONTLINGER = not SO_LINGER; SO_EXCLUSIVEADDRUSE = not SO_REUSEADDR; // disallow local address reuse// Additional options.

98

Page 99: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

SO_SNDBUF = $1001; // send buffer size SO_RCVBUF = $1002; // receive buffer size SO_SNDLOWAT = $1003; // send low-water mark SO_RCVLOWAT = $1004; // receive low-water mark SO_SNDTIMEO = $1005; // send timeout SO_RCVTIMEO = $1006; // receive timeout SO_ERROR = $1007; // get error status and clear SO_TYPE = $1008; // get socket type

// Options for connect and disconnect data and options.// Used only by non-TCP/IP transports such as DECNet, OSI TP4, etc. SO_CONNDATA = $7000; SO_CONNOPT = $7001; SO_DISCDATA = $7002; SO_DISCOPT = $7003; SO_CONNDATALEN = $7004; SO_CONNOPTLEN = $7005; SO_DISCDATALEN = $7006; SO_DISCOPTLEN = $7007;

// Option for opening sockets for synchronous access. SO_OPENTYPE = $7008; SO_SYNCHRONOUS_ALERT = $10; SO_SYNCHRONOUS_NONALERT = $20;

// Other NT-specific options. SO_MAXDG = $7009; SO_MAXPATHDG = $700A; SO_UPDATE_ACCEPT_CONTEXT = $700B; SO_CONNECT_TIME = $700C;

// TCP options. TCP_NODELAY = $0001; TCP_BSDURGENT = $7000;

// WinSock 2 extension -- new options SO_GROUP_ID = $2001; // ID of a socket group SO_GROUP_PRIORITY = $2002; // the relative priority within a group SO_MAX_MSG_SIZE = $2003; // maximum message size SO_Protocol_InfoA = $2004; // WSAPROTOCOL_INFOA structure

99

Page 100: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

SO_Protocol_InfoW = $2005; // WSAPROTOCOL_INFOW structure{$IFDEF UNICODE} SO_Protocol_Info = SO_Protocol_InfoW;{$ELSE} SO_Protocol_Info = SO_Protocol_InfoA;{$ENDIF} PVD_CONFIG = $3001; // configuration info for service provider SO_CONDITIONAL_ACCEPT = $3002; // enable true conditional accept: // connection is not ack-ed to the // other side until conditional // function returns CF_ACCEPT

// Address families. AF_UNSPEC = 0; // unspecified AF_UNIX = 1; // local to host (pipes, portals) AF_INET = 2; // internetwork: UDP, TCP, etc. AF_IMPLINK = 3; // arpanet imp addresses AF_PUP = 4; // pup protocols: e.g. BSP AF_CHAOS = 5; // mit CHAOS protocols AF_IPX = 6; // IPX and SPX AF_NS = AF_IPX; // XEROX NS protocols AF_ISO = 7; // ISO protocols AF_OSI = AF_ISO; // OSI is ISO AF_ECMA = 8; // european computer manufacturers AF_DATAKIT = 9; // datakit protocols AF_CCITT = 10; // CCITT protocols, X.25 etc AF_SNA = 11; // IBM SNA AF_DECnet = 12; // DECnet AF_DLI = 13; // Direct data link interface AF_LAT = 14; // LAT AF_HYLINK = 15; // NSC Hyperchannel AF_APPLETALK = 16; // AppleTalk AF_NETBIOS = 17; // NetBios-style addresses AF_VOICEVIEW = 18; // VoiceView AF_FIREFOX = 19; // FireFox AF_UNKNOWN1 = 20; // Somebody is using this! AF_BAN = 21; // Banyan AF_ATM = 22; // Native ATM Services

100

Page 101: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

AF_INET6 = 23; // Internetwork Version 6 AF_CLUSTER = 24; // Microsoft Wolfpack AF_12844 = 25; // IEEE 1284.4 WG AF AF_IRDA = 26; // IrDA AF_NETDES = 28; // Network Designers OSI & gateway enabled protocols AF_MAX = 29;// Protocol families, same as address families for now. PF_UNSPEC = AF_UNSPEC; PF_UNIX = AF_UNIX; PF_INET = AF_INET; PF_IMPLINK = AF_IMPLINK; PF_PUP = AF_PUP; PF_CHAOS = AF_CHAOS; PF_NS = AF_NS; PF_IPX = AF_IPX; PF_ISO = AF_ISO; PF_OSI = AF_OSI; PF_ECMA = AF_ECMA; PF_DATAKIT = AF_DATAKIT; PF_CCITT = AF_CCITT; PF_SNA = AF_SNA; PF_DECnet = AF_DECnet; PF_DLI = AF_DLI; PF_LAT = AF_LAT; PF_HYLINK = AF_HYLINK; PF_APPLETALK = AF_APPLETALK; PF_VOICEVIEW = AF_VOICEVIEW; PF_FIREFOX = AF_FIREFOX; PF_UNKNOWN1 = AF_UNKNOWN1; PF_BAN = AF_BAN; PF_ATM = AF_ATM; PF_INET6 = AF_INET6; PF_MAX = AF_MAX;type SunB = packed record s_b1, s_b2, s_b3, s_b4: u_char; end; SunW = packed record s_w1, s_w2: u_short; end;

101

Page 102: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

TInAddr = packed record case integer of 0: (S_un_b: SunB); 1: (S_un_w: SunW); 2: (S_addr: u_long); end; PInAddr = ^TInAddr;

// Structure used by kernel to store most addresses.

TSockAddrIn = packed record case Integer of 0: (sin_family : u_short; sin_port : u_short; sin_addr : TInAddr; sin_zero : array[0..7] of Char); 1: (sa_family : u_short; sa_data : array[0..13] of Char) end; PSockAddrIn = ^TSockAddrIn; TSockAddr = TSockAddrIn; PSockAddr = ^TSockAddr; SOCKADDR = TSockAddr; SOCKADDR_IN = TSockAddrIn; // Structure used by kernel to pass protocol information in raw sockets. PSockProto = ^TSockProto; TSockProto = packed record sp_family : u_short; sp_protocol : u_short; end;// Structure used for manipulating linger option. PLinger = ^TLinger; TLinger = packed record l_onoff: u_short; l_linger: u_short; end;const INADDR_ANY = $00000000; INADDR_LOOPBACK = $7F000001; INADDR_BROADCAST = $FFFFFFFF;

102

Page 103: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

INADDR_NONE = $FFFFFFFF; ADDR_ANY = INADDR_ANY; SOL_SOCKET = $ffff; // options for socket level MSG_OOB = $1; // process out-of-band data MSG_PEEK = $2; // peek at incoming message MSG_DONTROUTE = $4; // send without using routing tables MSG_PARTIAL = $8000; // partial send or recv for message xport// WinSock 2 extension -- new flags for WSASend(), WSASendTo(), WSARecv() and WSARecvFrom() MSG_INTERRUPT = $10; // send/recv in the interrupt context MSG_MAXIOVLEN = 16;// Define constant based on rfc883, used by gethostbyxxxx() calls. MAXGETHOSTSTRUCT = 1024;// Maximum queue length specifiable by listen. SOMAXCONN = $7fffffff;// WinSock 2 extension -- bit values and indices for FD_XXX network events FD_READ_BIT = 0; FD_WRITE_BIT = 1; FD_OOB_BIT = 2; FD_ACCEPT_BIT = 3; FD_CONNECT_BIT = 4; FD_CLOSE_BIT = 5; FD_QOS_BIT = 6; FD_GROUP_QOS_BIT = 7; FD_MAX_EVENTS = 8; FD_READ = (1 shl FD_READ_BIT); FD_WRITE = (1 shl FD_WRITE_BIT); FD_OOB = (1 shl FD_OOB_BIT); FD_ACCEPT = (1 shl FD_ACCEPT_BIT); FD_CONNECT = (1 shl FD_CONNECT_BIT); FD_CLOSE = (1 shl FD_CLOSE_BIT); FD_QOS = (1 shl FD_QOS_BIT); FD_GROUP_QOS = (1 shl FD_GROUP_QOS_BIT); FD_ALL_EVENTS = (1 shl FD_MAX_EVENTS) - 1;// All Windows Sockets error constants are biased by WSABASEERR from the "normal" WSABASEERR = 10000;// Windows Sockets definitions of regular Microsoft C error constants WSAEINTR = WSABASEERR+ 4;

103

Page 104: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

WSAEBADF = WSABASEERR+ 9; WSAEACCES = WSABASEERR+ 13; WSAEFAULT = WSABASEERR+ 14; WSAEINVAL = WSABASEERR+ 22; WSAEMFILE = WSABASEERR+ 24;// Windows Sockets definitions of regular Berkeley error constants WSAEWOULDBLOCK = WSABASEERR+ 35; WSAEINPROGRESS = WSABASEERR+ 36; WSAEALREADY = WSABASEERR+ 37; WSAENOTSOCK = WSABASEERR+ 38; WSAEDESTADDRREQ = WSABASEERR+ 39; WSAEMSGSIZE = WSABASEERR+ 40; WSAEPROTOTYPE = WSABASEERR+ 41; WSAENOPROTOOPT = WSABASEERR+ 42; WSAEPROTONOSUPPORT = WSABASEERR+ 43; WSAESOCKTNOSUPPORT = WSABASEERR+ 44; WSAEOPNOTSUPP = WSABASEERR+ 45; WSAEPFNOSUPPORT = WSABASEERR+ 46; WSAEAFNOSUPPORT = WSABASEERR+ 47; WSAEADDRINUSE = WSABASEERR+ 48; WSAEADDRNOTAVAIL = WSABASEERR+ 49; WSAENETDOWN = WSABASEERR+ 50; WSAENETUNREACH = WSABASEERR+ 51; WSAENETRESET = WSABASEERR+ 52; WSAECONNABORTED = WSABASEERR+ 53; WSAECONNRESET = WSABASEERR+ 54; WSAENOBUFS = WSABASEERR+ 55; WSAEISCONN = WSABASEERR+ 56; WSAENOTCONN = WSABASEERR+ 57; WSAESHUTDOWN = WSABASEERR+ 58; WSAETOOMANYREFS = WSABASEERR+ 59; WSAETIMEDOUT = WSABASEERR+ 60; WSAECONNREFUSED = WSABASEERR+ 61; WSAELOOP = WSABASEERR+ 62; WSAENAMETOOLONG = WSABASEERR+ 63; WSAEHOSTDOWN = WSABASEERR+ 64; WSAEHOSTUNREACH = WSABASEERR+ 65; WSAENOTEMPTY = WSABASEERR+ 66; WSAEPROCLIM = WSABASEERR+ 67; WSAEUSERS = WSABASEERR+ 68; WSAEDQUOT = WSABASEERR+ 69;

104

Page 105: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

WSAESTALE = WSABASEERR+ 70; WSAEREMOTE = WSABASEERR+ 71;// Extended Windows Sockets error constant definitions WSASYSNOTREADY = WSABASEERR+ 91; WSAVERNOTSUPPORTED = WSABASEERR+ 92; WSANOTINITIALISED = WSABASEERR+ 93; WSAEDISCON = WSABASEERR+101; WSAENOMORE = WSABASEERR+102; WSAECANCELLED = WSABASEERR+103; WSAEINVALIDPROCTABLE = WSABASEERR+104; WSAEINVALIDPROVIDER = WSABASEERR+105; WSAEPROVIDERFAILEDINIT = WSABASEERR+106; WSASYSCALLFAILURE = WSABASEERR+107; WSASERVICE_NOT_FOUND = WSABASEERR+108; WSATYPE_NOT_FOUND = WSABASEERR+109; WSA_E_NO_MORE = WSABASEERR+110; WSA_E_CANCELLED = WSABASEERR+111; WSAEREFUSED = WSABASEERR+112;{ Error return codes from gethostbyname() and gethostbyaddr() (when using the resolver). Note that these errors are retrieved via WSAGetLastError() and must therefore follow the rules for avoiding clashes with error numbers from specific implementations or language run-time systems. For this reason the codes are based at WSABASEERR+1001. Note also that [WSA]NO_ADDRESS is defined only for compatibility purposes. }// Authoritative Answer: Host not found WSAHOST_NOT_FOUND = WSABASEERR+1001; HOST_NOT_FOUND = WSAHOST_NOT_FOUND;// Non-Authoritative: Host not found, or SERVERFAIL WSATRY_AGAIN = WSABASEERR+1002; TRY_AGAIN = WSATRY_AGAIN;// Non recoverable errors, FORMERR, REFUSED, NOTIMP WSANO_RECOVERY = WSABASEERR+1003; NO_RECOVERY = WSANO_RECOVERY;// Valid name, no data record of requested type WSANO_DATA = WSABASEERR+1004; NO_DATA = WSANO_DATA;// no address, look for MX record WSANO_ADDRESS = WSANO_DATA; NO_ADDRESS = WSANO_ADDRESS;

105

Page 106: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// Define QOS related error return codes WSA_QOS_RECEIVERS = WSABASEERR+1005; // at least one Reserve has arrived WSA_QOS_SENDERS = WSABASEERR+1006; // at least one Path has arrived WSA_QOS_NO_SENDERS = WSABASEERR+1007; // there are no senders WSA_QOS_NO_RECEIVERS = WSABASEERR+1008; // there are no receivers WSA_QOS_REQUEST_CONFIRMED = WSABASEERR+1009; // Reserve has been confirmed WSA_QOS_ADMISSION_FAILURE = WSABASEERR+1010; // error due to lack of resources WSA_QOS_POLICY_FAILURE = WSABASEERR+1011; // rejected for administrative reasons - bad credentials WSA_QOS_BAD_STYLE = WSABASEERR+1012; // unknown or conflicting style WSA_QOS_BAD_OBJECT = WSABASEERR+1013; // problem with some part of the filterspec or providerspecific buffer in general WSA_QOS_TRAFFIC_CTRL_ERROR = WSABASEERR+1014; // problem with some part of the flowspec WSA_QOS_GENERIC_ERROR = WSABASEERR+1015; // general error WSA_QOS_ESERVICETYPE = WSABASEERR+1016; // invalid service type in flowspec WSA_QOS_EFLOWSPEC = WSABASEERR+1017; // invalid flowspec WSA_QOS_EPROVSPECBUF = WSABASEERR+1018; // invalid provider specific buffer WSA_QOS_EFILTERSTYLE = WSABASEERR+1019; // invalid filter style WSA_QOS_EFILTERTYPE = WSABASEERR+1020; // invalid filter type WSA_QOS_EFILTERCOUNT = WSABASEERR+1021; // incorrect number of filters WSA_QOS_EOBJLENGTH = WSABASEERR+1022; // invalid object length WSA_QOS_EFLOWCOUNT = WSABASEERR+1023; // incorrect number of flows WSA_QOS_EUNKOWNPSOBJ = WSABASEERR+1024; // unknown object in provider specific buffer

106

Page 107: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

WSA_QOS_EPOLICYOBJ = WSABASEERR+1025; // invalid policy object in provider specific buffer WSA_QOS_EFLOWDESC = WSABASEERR+1026; // invalid flow descriptor in the list WSA_QOS_EPSFLOWSPEC = WSABASEERR+1027; // inconsistent flow spec in provider specific buffer WSA_QOS_EPSFILTERSPEC = WSABASEERR+1028; // invalid filter spec in provider specific buffer WSA_QOS_ESDMODEOBJ = WSABASEERR+1029; // invalid shape discard mode object in provider specific buffer WSA_QOS_ESHAPERATEOBJ = WSABASEERR+1030; // invalid shaping rate object in provider specific buffer WSA_QOS_RESERVED_PETYPE = WSABASEERR+1031; // reserved policy element in provider specific buffer{ WinSock 2 extension -- new error codes and type definition } WSA_IO_PENDING = ERROR_IO_PENDING; WSA_IO_INCOMPLETE = ERROR_IO_INCOMPLETE; WSA_INVALID_HANDLE = ERROR_INVALID_HANDLE; WSA_INVALID_PARAMETER = ERROR_INVALID_PARAMETER; WSA_NOT_ENOUGH_MEMORY = ERROR_NOT_ENOUGH_MEMORY; WSA_OPERATION_ABORTED = ERROR_OPERATION_ABORTED; WSA_INVALID_EVENT = WSAEVENT(nil); WSA_MAXIMUM_WAIT_EVENTS = MAXIMUM_WAIT_OBJECTS; WSA_WAIT_FAILED = $ffffffff; WSA_WAIT_EVENT_0 = WAIT_OBJECT_0; WSA_WAIT_IO_COMPLETION = WAIT_IO_COMPLETION; WSA_WAIT_TIMEOUT = WAIT_TIMEOUT; WSA_INFINITE = INFINITE;{ Windows Sockets errors redefined as regular Berkeley error constants. These are commented out in Windows NT to avoid conflicts with errno.h. Use the WSA constants instead. } EWOULDBLOCK = WSAEWOULDBLOCK; EINPROGRESS = WSAEINPROGRESS; EALREADY = WSAEALREADY; ENOTSOCK = WSAENOTSOCK; EDESTADDRREQ = WSAEDESTADDRREQ; EMSGSIZE = WSAEMSGSIZE; EPROTOTYPE = WSAEPROTOTYPE; ENOPROTOOPT = WSAENOPROTOOPT;

107

Page 108: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

EPROTONOSUPPORT = WSAEPROTONOSUPPORT; ESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT; EOPNOTSUPP = WSAEOPNOTSUPP; EPFNOSUPPORT = WSAEPFNOSUPPORT; EAFNOSUPPORT = WSAEAFNOSUPPORT; EADDRINUSE = WSAEADDRINUSE; EADDRNOTAVAIL = WSAEADDRNOTAVAIL; ENETDOWN = WSAENETDOWN; ENETUNREACH = WSAENETUNREACH; ENETRESET = WSAENETRESET; ECONNABORTED = WSAECONNABORTED; ECONNRESET = WSAECONNRESET; ENOBUFS = WSAENOBUFS; EISCONN = WSAEISCONN; ENOTCONN = WSAENOTCONN; ESHUTDOWN = WSAESHUTDOWN; ETOOMANYREFS = WSAETOOMANYREFS; ETIMEDOUT = WSAETIMEDOUT; ECONNREFUSED = WSAECONNREFUSED; ELOOP = WSAELOOP; ENAMETOOLONG = WSAENAMETOOLONG; EHOSTDOWN = WSAEHOSTDOWN; EHOSTUNREACH = WSAEHOSTUNREACH; ENOTEMPTY = WSAENOTEMPTY; EPROCLIM = WSAEPROCLIM; EUSERS = WSAEUSERS; EDQUOT = WSAEDQUOT; ESTALE = WSAESTALE; EREMOTE = WSAEREMOTE; WSADESCRIPTION_LEN = 256; WSASYS_STATUS_LEN = 128;type PWSAData = ^TWSAData; TWSAData = packed record wVersion : Word; wHighVersion : Word; szDescription : Array[0..WSADESCRIPTION_LEN] of Char; szSystemStatus : Array[0..WSASYS_STATUS_LEN] of Char; iMaxSockets : Word; iMaxUdpDg : Word; lpVendorInfo : PChar;

108

Page 109: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

end;{ WSAOVERLAPPED = Record Internal: LongInt; InternalHigh: LongInt; Offset: LongInt; OffsetHigh: LongInt; hEvent: WSAEVENT; end;} WSAOVERLAPPED = TOverlapped; TWSAOverlapped = WSAOverlapped; PWSAOverlapped = ^WSAOverlapped; LPWSAOVERLAPPED = PWSAOverlapped;{ WinSock 2 extension -- WSABUF and QOS struct, include qos.h }{ to pull in FLOWSPEC and related definitions } WSABUF = packed record len: U_LONG; { the length of the buffer } buf: PChar; { the pointer to the buffer } end {WSABUF}; PWSABUF = ^WSABUF; LPWSABUF = PWSABUF; TServiceType = LongInt; TFlowSpec = packed record TokenRate, // In Bytes/sec TokenBucketSize, // In Bytes PeakBandwidth, // In Bytes/sec Latency, // In microseconds DelayVariation : LongInt;// In microseconds ServiceType : TServiceType; MaxSduSize, MinimumPolicedSize : LongInt;// In Bytes end; PFlowSpec = ^TFLOWSPEC; QOS = packed record SendingFlowspec: TFlowSpec; { the flow spec for data sending } ReceivingFlowspec: TFlowSpec; { the flow spec for data receiving } ProviderSpecific: WSABUF; { additional provider specific stuff } end; TQualityOfService = QOS; PQOS = ^QOS; LPQOS = PQOS;const SERVICETYPE_NOTRAFFIC = $00000000; // No data in this direction

109

Page 110: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

SERVICETYPE_BESTEFFORT = $00000001; // Best Effort SERVICETYPE_CONTROLLEDLOAD = $00000002; // Controlled Load SERVICETYPE_GUARANTEED = $00000003; // Guaranteed SERVICETYPE_NETWORK_UNAVAILABLE = $00000004; // Used to notify change to user SERVICETYPE_GENERAL_INFORMATION = $00000005; // corresponds to "General Parameters" defined by IntServ SERVICETYPE_NOCHANGE = $00000006; // used to indicate that the flow spec contains no change from any previous one// to turn on immediate traffic control, OR this flag with the ServiceType field in teh FLOWSPEC SERVICE_IMMEDIATE_TRAFFIC_CONTROL = $80000000;// WinSock 2 extension -- manifest constants for return values of the condition function CF_ACCEPT = $0000; CF_REJECT = $0001; CF_DEFER = $0002;

// WinSock 2 extension -- manifest constants for shutdown() SD_RECEIVE = $00; SD_SEND = $01; SD_BOTH = $02;// WinSock 2 extension -- data type and manifest constants for socket groups SG_UNCONSTRAINED_GROUP = $01; SG_CONSTRAINED_GROUP = $02;type GROUP = DWORD;// WinSock 2 extension -- data type for WSAEnumNetworkEvents() TWSANetworkEvents = record lNetworkEvents: LongInt; iErrorCode: Array[0..FD_MAX_EVENTS-1] of Integer; end; PWSANetworkEvents = ^TWSANetworkEvents; LPWSANetworkEvents = PWSANetworkEvents;// WinSock 2 extension -- WSAPROTOCOL_INFO structure{$ifndef ver130} TGUID = packed record D1: LongInt; D2: Word;

110

Page 111: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

D3: Word; D4: Array[0..7] of Byte; end; PGUID = ^TGUID;{$endif} LPGUID = PGUID;// WinSock 2 extension -- WSAPROTOCOL_INFO manifest constantsconst MAX_PROTOCOL_CHAIN = 7; BASE_PROTOCOL = 1; LAYERED_PROTOCOL = 0; WSAPROTOCOL_LEN = 255;type TWSAProtocolChain = record ChainLen: Integer; // the length of the chain, // length = 0 means layered protocol, // length = 1 means base protocol, // length > 1 means protocol chain ChainEntries: Array[0..MAX_PROTOCOL_CHAIN-1] of LongInt; // a list of dwCatalogEntryIds end;type TWSAProtocol_InfoA = record dwServiceFlags1: LongInt; dwServiceFlags2: LongInt; dwServiceFlags3: LongInt; dwServiceFlags4: LongInt; dwProviderFlags: LongInt; ProviderId: TGUID; dwCatalogEntryId: LongInt; ProtocolChain: TWSAProtocolChain; iVersion: Integer; iAddressFamily: Integer; iMaxSockAddr: Integer; iMinSockAddr: Integer; iSocketType: Integer; iProtocol: Integer; iProtocolMaxOffset: Integer; iNetworkByteOrder: Integer; iSecurityScheme: Integer; dwMessageSize: LongInt;

111

Page 112: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

dwProviderReserved: LongInt; szProtocol: Array[0..WSAPROTOCOL_LEN+1-1] of Char; end {TWSAProtocol_InfoA}; PWSAProtocol_InfoA = ^TWSAProtocol_InfoA; LPWSAProtocol_InfoA = PWSAProtocol_InfoA; TWSAProtocol_InfoW = record dwServiceFlags1: LongInt; dwServiceFlags2: LongInt; dwServiceFlags3: LongInt; dwServiceFlags4: LongInt; dwProviderFlags: LongInt; ProviderId: TGUID; dwCatalogEntryId: LongInt; ProtocolChain: TWSAProtocolChain; iVersion: Integer; iAddressFamily: Integer; iMaxSockAddr: Integer; iMinSockAddr: Integer; iSocketType: Integer; iProtocol: Integer; iProtocolMaxOffset: Integer; iNetworkByteOrder: Integer; iSecurityScheme: Integer; dwMessageSize: LongInt; dwProviderReserved: LongInt; szProtocol: Array[0..WSAPROTOCOL_LEN+1-1] of WideChar; end {TWSAProtocol_InfoW}; PWSAProtocol_InfoW = ^TWSAProtocol_InfoW; LPWSAProtocol_InfoW = PWSAProtocol_InfoW;{$IFDEF UNICODE} WSAProtocol_Info = TWSAProtocol_InfoW; TWSAProtocol_Info = TWSAProtocol_InfoW; PWSAProtocol_Info = PWSAProtocol_InfoW; LPWSAProtocol_Info = PWSAProtocol_InfoW;{$ELSE} WSAProtocol_Info = TWSAProtocol_InfoA; TWSAProtocol_Info = TWSAProtocol_InfoA; PWSAProtocol_Info = PWSAProtocol_InfoA; LPWSAProtocol_Info = PWSAProtocol_InfoA;{$ENDIF}const

112

Page 113: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

// Flag bit definitions for dwProviderFlags PFL_MULTIPLE_PROTO_ENTRIES = $00000001; PFL_RECOMMENDED_PROTO_ENTRY = $00000002; PFL_HIDDEN = $00000004; PFL_MATCHES_PROTOCOL_ZERO = $00000008;

// Flag bit definitions for dwServiceFlags1 XP1_CONNECTIONLESS = $00000001; XP1_GUARANTEED_DELIVERY = $00000002; XP1_GUARANTEED_ORDER = $00000004; XP1_MESSAGE_ORIENTED = $00000008; XP1_PSEUDO_STREAM = $00000010; XP1_GRACEFUL_CLOSE = $00000020; XP1_EXPEDITED_DATA = $00000040; XP1_CONNECT_DATA = $00000080; XP1_DISCONNECT_DATA = $00000100; XP1_SUPPORT_BROADCAST = $00000200; XP1_SUPPORT_MULTIPOINT = $00000400; XP1_MULTIPOINT_CONTROL_PLANE = $00000800; XP1_MULTIPOINT_DATA_PLANE = $00001000; XP1_QOS_SUPPORTED = $00002000; XP1_INTERRUPT = $00004000; XP1_UNI_SEND = $00008000; XP1_UNI_RECV = $00010000; XP1_IFS_HANDLES = $00020000; XP1_PARTIAL_MESSAGE = $00040000;

BIGENDIAN = $0000; LITTLEENDIAN = $0001;

SECURITY_PROTOCOL_NONE = $0000;

// WinSock 2 extension -- manifest constants for WSAJoinLeaf() JL_SENDER_ONLY = $01; JL_RECEIVER_ONLY = $02; JL_BOTH = $04;

// WinSock 2 extension -- manifest constants for WSASocket() WSA_FLAG_OVERLAPPED = $01; WSA_FLAG_MULTIPOINT_C_ROOT = $02; WSA_FLAG_MULTIPOINT_C_LEAF = $04;

113

Page 114: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

WSA_FLAG_MULTIPOINT_D_ROOT = $08; WSA_FLAG_MULTIPOINT_D_LEAF = $10;

// WinSock 2 extension -- manifest constants for WSAIoctl() IOC_UNIX = $00000000; IOC_WS2 = $08000000; IOC_PROTOCOL = $10000000; IOC_VENDOR = $18000000;

SIO_ASSOCIATE_HANDLE = 1 or IOC_WS2 or IOC_IN; SIO_ENABLE_CIRCULAR_QUEUEING = 2 or IOC_WS2; SIO_FIND_ROUTE = 3 or IOC_WS2 or IOC_OUT; SIO_FLUSH = 4 or IOC_WS2; SIO_GET_BROADCAST_ADDRESS = 5 or IOC_WS2 or IOC_OUT; SIO_GET_EXTENSION_FUNCTION_POINTER = 6 or IOC_WS2 or IOC_INOUT; SIO_GET_QOS = 7 or IOC_WS2 or IOC_INOUT; SIO_GET_GROUP_QOS = 8 or IOC_WS2 or IOC_INOUT; SIO_MULTIPOINT_LOOPBACK = 9 or IOC_WS2 or IOC_IN; SIO_MULTICAST_SCOPE = 10 or IOC_WS2 or IOC_IN; SIO_SET_QOS = 11 or IOC_WS2 or IOC_IN; SIO_SET_GROUP_QOS = 12 or IOC_WS2 or IOC_IN; SIO_TRANSLATE_HANDLE = 13 or IOC_WS2 or IOC_INOUT; SIO_ROUTING_INTERFACE_QUERY = 20 or IOC_WS2 or IOC_INOUT; SIO_ROUTING_INTERFACE_CHANGE = 21 or IOC_WS2 or IOC_IN; SIO_ADDRESS_LIST_QUERY = 22 or IOC_WS2 or IOC_OUT; // see below SOCKET_ADDRESS_LIST SIO_ADDRESS_LIST_CHANGE = 23 or IOC_WS2; SIO_QUERY_TARGET_PNP_HANDLE = 24 or IOC_WS2 or IOC_OUT;// WinSock 2 extension -- manifest constants for SIO_TRANSLATE_HANDLE ioctl TH_NETDEV = $00000001; TH_TAPI = $00000002;type// Manifest constants and type definitions related to name resolution and// registration (RNR) API

114

Page 115: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

TBLOB = packed record cbSize : U_LONG; pBlobData : PBYTE; end; PBLOB = ^TBLOB;// Service Install Flagsconst SERVICE_MULTIPLE = $00000001;

// & Name Spaces NS_ALL = 0; NS_SAP = 1; NS_NDS = 2; NS_PEER_BROWSE = 3; NS_TCPIP_LOCAL = 10; NS_TCPIP_HOSTS = 11; NS_DNS = 12; NS_NETBT = 13; NS_WINS = 14; NS_NBP = 20; NS_MS = 30; NS_STDA = 31; NS_NTDS = 32; NS_X500 = 40; NS_NIS = 41; NS_NISPLUS = 42; NS_WRQ = 50; NS_NETDES = 60;

{ Resolution flags for WSAGetAddressByName(). Note these are also used by the 1.1 API GetAddressByName, so leave them around. } RES_UNUSED_1 = $00000001; RES_FLUSH_CACHE = $00000002; RES_SERVICE = $00000004;

{ Well known value names for Service Types } SERVICE_TYPE_VALUE_IPXPORTA = 'IpxSocket'; SERVICE_TYPE_VALUE_IPXPORTW : PWideChar = 'IpxSocket'; SERVICE_TYPE_VALUE_SAPIDA = 'SapId'; SERVICE_TYPE_VALUE_SAPIDW : PWideChar = 'SapId';

115

Page 116: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

SERVICE_TYPE_VALUE_TCPPORTA = 'TcpPort'; SERVICE_TYPE_VALUE_TCPPORTW : PWideChar = 'TcpPort';

SERVICE_TYPE_VALUE_UDPPORTA = 'UdpPort'; SERVICE_TYPE_VALUE_UDPPORTW : PWideChar = 'UdpPort'; SERVICE_TYPE_VALUE_OBJECTIDA = 'ObjectId'; SERVICE_TYPE_VALUE_OBJECTIDW : PWideChar = 'ObjectId';{$IFDEF UNICODE} SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDW; SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTW; SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTW; SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDW;{$ELSE} SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDA; SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTA; SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTA; SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDA;{$ENDIF}

// SockAddr Informationtype SOCKET_ADDRESS = packed record lpSockaddr : PSockAddr; iSockaddrLength : Integer; end; PSOCKET_ADDRESS = ^SOCKET_ADDRESS;

// CSAddr Information CSADDR_INFO = packed record LocalAddr, RemoteAddr : SOCKET_ADDRESS; iSocketType, iProtocol : LongInt; end; PCSADDR_INFO = ^CSADDR_INFO;

116

Page 117: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

LPCSADDR_INFO = ^CSADDR_INFO;

// Address list returned via WSAIoctl( SIO_ADDRESS_LIST_QUERY ) SOCKET_ADDRESS_LIST = packed record iAddressCount : Integer; Address : Array [0..0] of SOCKET_ADDRESS; end; LPSOCKET_ADDRESS_LIST = ^SOCKET_ADDRESS_LIST;

// Address Family/Protocol Tuples AFProtocols = record iAddressFamily : Integer; iProtocol : Integer; end; TAFProtocols = AFProtocols; PAFProtocols = ^TAFProtocols;

// Client Query API Typedefs// The comparators TWSAEComparator = (COMP_EQUAL {= 0}, COMP_NOTLESS );

TWSAVersion = record dwVersion : DWORD; ecHow : TWSAEComparator; end; PWSAVersion = ^TWSAVersion;

TWSAQuerySetA = packed record dwSize : DWORD; lpszServiceInstanceName : PChar; lpServiceClassId : PGUID; lpVersion : PWSAVERSION; lpszComment : PChar; dwNameSpace : DWORD; lpNSProviderId : PGUID; lpszContext : PChar; dwNumberOfProtocols : DWORD; lpafpProtocols : PAFProtocols; lpszQueryString : PChar; dwNumberOfCsAddrs : DWORD;

117

Page 118: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

lpcsaBuffer : PCSADDR_INFO; dwOutputFlags : DWORD; lpBlob : PBLOB; end; PWSAQuerySetA = ^TWSAQuerySetA; LPWSAQuerySetA = PWSAQuerySetA;

TWSAQuerySetW = packed record dwSize : DWORD; lpszServiceInstanceName : PWideChar; lpServiceClassId : PGUID; lpVersion : PWSAVERSION; lpszComment : PWideChar; dwNameSpace : DWORD; lpNSProviderId : PGUID; lpszContext : PWideChar; dwNumberOfProtocols : DWORD; lpafpProtocols : PAFProtocols; lpszQueryString : PWideChar; dwNumberOfCsAddrs : DWORD; lpcsaBuffer : PCSADDR_INFO; dwOutputFlags : DWORD; lpBlob : PBLOB; end; PWSAQuerySetW = ^TWSAQuerySetW; LPWSAQuerySetW = PWSAQuerySetW;

{$IFDEF UNICODE} TWSAQuerySet = TWSAQuerySetA; PWSAQuerySet = PWSAQuerySetW; LPWSAQuerySet = PWSAQuerySetW;{$ELSE} TWSAQuerySet = TWSAQuerySetA; PWSAQuerySet = PWSAQuerySetA; LPWSAQuerySet = PWSAQuerySetA;{$ENDIF}

const LUP_DEEP = $0001; LUP_CONTAINERS = $0002; LUP_NOCONTAINERS = $0004;

118

Page 119: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

LUP_NEAREST = $0008; LUP_RETURN_NAME = $0010; LUP_RETURN_TYPE = $0020; LUP_RETURN_VERSION = $0040; LUP_RETURN_COMMENT = $0080; LUP_RETURN_ADDR = $0100; LUP_RETURN_BLOB = $0200; LUP_RETURN_ALIASES = $0400; LUP_RETURN_QUERY_STRING = $0800; LUP_RETURN_ALL = $0FF0; LUP_RES_SERVICE = $8000; LUP_FLUSHCACHE = $1000; LUP_FLUSHPREVIOUS = $2000;

// Return flags RESULT_IS_ALIAS = $0001;

type// Service Address Registration and Deregistration Data Types. TWSAeSetServiceOp = ( RNRSERVICE_REGISTER{=0}, RNRSERVICE_DEREGISTER, RNRSERVICE_DELETE );

{ Service Installation/Removal Data Types. } TWSANSClassInfoA = packed record lpszName : PChar; dwNameSpace : DWORD; dwValueType : DWORD; dwValueSize : DWORD; lpValue : Pointer; end; PWSANSClassInfoA = ^TWSANSClassInfoA;

TWSANSClassInfoW = packed record lpszName : PWideChar; dwNameSpace : DWORD; dwValueType : DWORD; dwValueSize : DWORD; lpValue : Pointer; end {TWSANSClassInfoW}; PWSANSClassInfoW = ^TWSANSClassInfoW;

119

Page 120: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

{$IFDEF UNICODE} WSANSClassInfo = TWSANSClassInfoW; TWSANSClassInfo = TWSANSClassInfoW; PWSANSClassInfo = PWSANSClassInfoW; LPWSANSClassInfo = PWSANSClassInfoW;{$ELSE} WSANSClassInfo = TWSANSClassInfoA; TWSANSClassInfo = TWSANSClassInfoA; PWSANSClassInfo = PWSANSClassInfoA; LPWSANSClassInfo = PWSANSClassInfoA;{$ENDIF // UNICODE}

TWSAServiceClassInfoA = packed record lpServiceClassId : PGUID; lpszServiceClassName : PChar; dwCount : DWORD; lpClassInfos : PWSANSClassInfoA; end; PWSAServiceClassInfoA = ^TWSAServiceClassInfoA; LPWSAServiceClassInfoA = PWSAServiceClassInfoA;

TWSAServiceClassInfoW = packed record lpServiceClassId : PGUID; lpszServiceClassName : PWideChar; dwCount : DWORD; lpClassInfos : PWSANSClassInfoW; end; PWSAServiceClassInfoW = ^TWSAServiceClassInfoW; LPWSAServiceClassInfoW = PWSAServiceClassInfoW;

{$IFDEF UNICODE} WSAServiceClassInfo = TWSAServiceClassInfoW; TWSAServiceClassInfo = TWSAServiceClassInfoW; PWSAServiceClassInfo = PWSAServiceClassInfoW; LPWSAServiceClassInfo = PWSAServiceClassInfoW;{$ELSE} WSAServiceClassInfo = TWSAServiceClassInfoA; TWSAServiceClassInfo = TWSAServiceClassInfoA; PWSAServiceClassInfo = PWSAServiceClassInfoA; LPWSAServiceClassInfo = PWSAServiceClassInfoA;{$ENDIF}

120

Page 121: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

TWSANameSpace_InfoA = packed record NSProviderId : TGUID; dwNameSpace : DWORD; fActive : DWORD{Bool}; dwVersion : DWORD; lpszIdentifier : PChar; end; PWSANameSpace_InfoA = ^TWSANameSpace_InfoA; LPWSANameSpace_InfoA = PWSANameSpace_InfoA;

TWSANameSpace_InfoW = packed record NSProviderId : TGUID; dwNameSpace : DWORD; fActive : DWORD{Bool}; dwVersion : DWORD; lpszIdentifier : PWideChar; end {TWSANameSpace_InfoW}; PWSANameSpace_InfoW = ^TWSANameSpace_InfoW; LPWSANameSpace_InfoW = PWSANameSpace_InfoW;

{$IFDEF UNICODE} WSANameSpace_Info = TWSANameSpace_InfoW; TWSANameSpace_Info = TWSANameSpace_InfoW; PWSANameSpace_Info = PWSANameSpace_InfoW; LPWSANameSpace_Info = PWSANameSpace_InfoW;{$ELSE} WSANameSpace_Info = TWSANameSpace_InfoA; TWSANameSpace_Info = TWSANameSpace_InfoA; PWSANameSpace_Info = PWSANameSpace_InfoA; LPWSANameSpace_Info = PWSANameSpace_InfoA;{$ENDIF}

{ WinSock 2 extensions -- data types for the condition function in }{ WSAAccept() and overlapped I/O completion routine. }type LPCONDITIONPROC = function (lpCallerId: LPWSABUF; lpCallerData : LPWSABUF; lpSQOS,lpGQOS : LPQOS; lpCalleeId,lpCalleeData : LPWSABUF; g : GROUP; dwCallbackData : DWORD ) : Integer; stdcall;

121

Page 122: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

LPWSAOVERLAPPED_COMPLETION_ROUTINE = procedure ( const dwError, cbTransferred : DWORD; const lpOverlapped : LPWSAOVERLAPPED; const dwFlags : DWORD ); stdcall;

function accept( const s: TSocket; var addr: TSockAddr; var addrlen: Integer ): TSocket; stdcall;function bind( const s: TSocket; const addr: PSockAddr; const namelen: Integer ): Integer; stdcall;function closesocket( const s: TSocket ): Integer; stdcall;function connect( const s: TSocket; const name: PSockAddr; namelen: Integer): Integer; stdcall;function ioctlsocket( const s: TSocket; const cmd: DWORD; var arg: u_long ): Integer; stdcall;function getpeername( const s: TSocket; var name: TSockAddr; var namelen: Integer ): Integer; stdcall;function getsockname( const s: TSocket; var name: TSockAddr; var namelen: Integer ): Integer; stdcall;function getsockopt( const s: TSocket; const level, optname: Integer; optval: PChar; var optlen: Integer ): Integer; stdcall;function htonl(hostlong: u_long): u_long; stdcall;function htons(hostshort: u_short): u_short; stdcall;function inet_addr(cp: PChar): u_long; stdcall;function inet_ntoa(inaddr: TInAddr): PChar; stdcall;function listen(s: TSocket; backlog: Integer): Integer; stdcall;function ntohl(netlong: u_long): u_long; stdcall;function ntohs(netshort: u_short): u_short; stdcall;function recv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;function recvfrom(s: TSocket; var Buf; len, flags: Integer; var from: TSockAddr; var fromlen: Integer): Integer; stdcall;function select(nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Integer; stdcall;function send(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;function sendto(s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr; tolen: Integer): Integer; stdcall;function setsockopt(s: TSocket; level, optname: Integer; optval: PChar; optlen: Integer): Integer; stdcall;function shutdown(s: TSocket; how: Integer): Integer; stdcall;function socket( const af, struct, protocol: Integer ): TSocket; stdcall;function gethostbyaddr(addr: Pointer; len, struct: Integer): PHostEnt; stdcall;function gethostbyname(name: PChar): PHostEnt; stdcall;

122

Page 123: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function gethostname(name: PChar; len: Integer): Integer; stdcall;function getservbyport(port: Integer; proto: PChar): PServEnt; stdcall;function getservbyname(const name, proto: PChar): PServEnt; stdcall;function getprotobynumber(const proto: Integer): PProtoEnt; stdcall;function getprotobyname(const name: PChar): PProtoEnt; stdcall;function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer; stdcall;function WSACleanup: Integer; stdcall;

procedure WSASetLastError(iError: Integer); stdcall;function WSAGetLastError: Integer; stdcall;function WSAIsBlocking: BOOL; stdcall;function WSAUnhookBlockingHook: Integer; stdcall;function WSASetBlockingHook(lpBlockFunc: TFarProc): TFarProc; stdcall;function WSACancelBlockingCall: Integer; stdcall;function WSAAsyncGetServByName(HWindow: HWND; wMsg: u_int; name, proto, buf: PChar; buflen: Integer): THandle; stdcall;function WSAAsyncGetServByPort( HWindow: HWND; wMsg, port: u_int; proto, buf: PChar; buflen: Integer): THandle; stdcall;function WSAAsyncGetProtoByName(HWindow: HWND; wMsg: u_int; name, buf: PChar; buflen: Integer): THandle; stdcall;function WSAAsyncGetProtoByNumber(HWindow: HWND; wMsg: u_int; number: Integer; buf: PChar; buflen: Integer): THandle; stdcall;function WSAAsyncGetHostByName(HWindow: HWND; wMsg: u_int; name, buf: PChar; buflen: Integer): THandle; stdcall;function WSAAsyncGetHostByAddr(HWindow: HWND; wMsg: u_int; addr: PChar; len, struct: Integer; buf: PChar; buflen: Integer): THandle; stdcall;function WSACancelAsyncRequest(hAsyncTaskHandle: THandle): Integer; stdcall;function WSAAsyncSelect(s: TSocket; HWindow: HWND; wMsg: u_int; lEvent: Longint): Integer; stdcall;function __WSAFDIsSet(s: TSOcket; var FDSet: TFDSet): Bool; stdcall;

{ WinSock 2 API new function prototypes }function WSAAccept( s : TSocket; addr : TSockAddr; addrlen : PInteger; lpfnCondition : LPCONDITIONPROC; dwCallbackData : DWORD ): TSocket; stdcall;function WSACloseEvent( hEvent : WSAEVENT) : WordBool; stdcall;

123

Page 124: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSAConnect( s : TSocket; const name : PSockAddr; namelen : Integer; lpCallerData,lpCalleeData : LPWSABUF; lpSQOS,lpGQOS : LPQOS ) : Integer; stdcall;function WSACreateEvent : WSAEVENT; stdcall;

function WSADuplicateSocketA( s : TSocket; dwProcessId : DWORD; lpProtocolInfo : LPWSAProtocol_InfoA ) : Integer; stdcall;function WSADuplicateSocketW( s : TSocket; dwProcessId : DWORD; lpProtocolInfo : LPWSAProtocol_InfoW ) : Integer; stdcall;function WSADuplicateSocket( s : TSocket; dwProcessId : DWORD; lpProtocolInfo : LPWSAProtocol_Info ) : Integer; stdcall;

function WSAEnumNetworkEvents( const s : TSocket; const hEventObject : WSAEVENT; lpNetworkEvents : LPWSANETWORKEVENTS ) :Integer; stdcall;function WSAEnumProtocolsA( lpiProtocols : PInteger; lpProtocolBuffer : LPWSAProtocol_InfoA; var lpdwBufferLength : DWORD ) : Integer; stdcall;function WSAEnumProtocolsW( lpiProtocols : PInteger; lpProtocolBuffer : LPWSAProtocol_InfoW; var lpdwBufferLength : DWORD ) : Integer; stdcall;function WSAEnumProtocols( lpiProtocols : PInteger; lpProtocolBuffer : LPWSAProtocol_Info; var lpdwBufferLength : DWORD ) : Integer; stdcall;

function WSAEventSelect( s : TSocket; hEventObject : WSAEVENT; lNetworkEvents : LongInt ): Integer; stdcall;

function WSAGetOverlappedResult( s : TSocket; lpOverlapped : LPWSAOVERLAPPED; lpcbTransfer : LPDWORD; fWait : BOOL; var lpdwFlags : DWORD ) : WordBool; stdcall;

function WSAGetQosByName( s : TSocket; lpQOSName : LPWSABUF; lpQOS : LPQOS ): WordBool; stdcall;

function WSAhtonl( s : TSocket; hostlong : u_long; var lpnetlong : DWORD ): Integer; stdcall;function WSAhtons( s : TSocket; hostshort : u_short; var lpnetshort : WORD ): Integer; stdcall;

124

Page 125: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSAIoctl( s : TSocket; dwIoControlCode : DWORD; lpvInBuffer : Pointer; cbInBuffer : DWORD; lpvOutBuffer : Pointer; cbOutBuffer : DWORD; lpcbBytesReturned : LPDWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ) : Integer; stdcall;

function WSAJoinLeaf( s : TSocket; name : PSockAddr; namelen : Integer; lpCallerData,lpCalleeData : LPWSABUF; lpSQOS,lpGQOS : LPQOS; dwFlags : DWORD ) : TSocket; stdcall;

function WSANtohl( s : TSocket; netlong : u_long; var lphostlong : DWORD ): Integer; stdcall;function WSANtohs( s : TSocket; netshort : u_short; var lphostshort : WORD ): Integer; stdcall;

function WSARecv( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;function WSARecvDisconnect( s : TSocket; lpInboundDisconnectData : LPWSABUF ): Integer; stdcall;function WSARecvFrom( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD; lpFrom : PSockAddr; lpFromlen : PInteger; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;

function WSAResetEvent( hEvent : WSAEVENT ): WordBool; stdcall;

function WSASend( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;function WSASendDisconnect( s : TSocket; lpOutboundDisconnectData : LPWSABUF ): Integer; stdcall;

125

Page 126: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSASendTo( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpTo : PSockAddr; iTolen : Integer; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;

function WSASetEvent( hEvent : WSAEVENT ): WordBool; stdcall;

function WSASocketA( af, iType, protocol : Integer; lpProtocolInfo : LPWSAProtocol_InfoA; g : GROUP; dwFlags : DWORD ): TSocket; stdcall;function WSASocketW( af, iType, protocol : Integer; lpProtocolInfo : LPWSAProtocol_InfoW; g : GROUP; dwFlags : DWORD ): TSocket; stdcall;function WSASocket( af, iType, protocol : Integer; lpProtocolInfo : LPWSAProtocol_Info; g : GROUP; dwFlags : DWORD ): TSocket; stdcall;

function WSAWaitForMultipleEvents( cEvents : DWORD; lphEvents : PWSAEVENT; fWaitAll : LongBool; dwTimeout : DWORD; fAlertable : LongBool ): DWORD; stdcall;

function WSAAddressToStringA( lpsaAddress : PSockAddr; const dwAddressLength : DWORD; const lpProtocolInfo : LPWSAProtocol_InfoA; const lpszAddressString : PChar; var lpdwAddressStringLength : DWORD ): Integer; stdcall;function WSAAddressToStringW( lpsaAddress : PSockAddr; const dwAddressLength : DWORD; const lpProtocolInfo : LPWSAProtocol_InfoW; const lpszAddressString : PWideChar; var lpdwAddressStringLength : DWORD ): Integer; stdcall;function WSAAddressToString( lpsaAddress : PSockAddr; const dwAddressLength : DWORD; const lpProtocolInfo : LPWSAProtocol_Info; const lpszAddressString : PMBChar; var lpdwAddressStringLength : DWORD ): Integer; stdcall;

function WSAStringToAddressA( const AddressString : PChar; const AddressFamily: Integer; const lpProtocolInfo : LPWSAProtocol_InfoA;

126

Page 127: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

var lpAddress : TSockAddr; var lpAddressLength : Integer ): Integer; stdcall;function WSAStringToAddressW( const AddressString : PWideChar; const AddressFamily: Integer; const lpProtocolInfo : LPWSAProtocol_InfoA; var lpAddress : TSockAddr; var lpAddressLength : Integer ): Integer; stdcall;function WSAStringToAddress( const AddressString : PMBChar; const AddressFamily: Integer; const lpProtocolInfo : LPWSAProtocol_Info; var lpAddress : TSockAddr; var lpAddressLength : Integer ): Integer; stdcall;

{ Registration and Name Resolution API functions }function WSALookupServiceBeginA( var qsRestrictions : TWSAQuerySetA; const dwControlFlags : DWORD; var hLookup : THANDLE ): Integer; stdcall;function WSALookupServiceBeginW( var qsRestrictions : TWSAQuerySetW; const dwControlFlags : DWORD; var hLookup : THANDLE ): Integer; stdcall;function WSALookupServiceBegin( var qsRestrictions : TWSAQuerySet; const dwControlFlags : DWORD; var hLookup : THANDLE ): Integer; stdcall;

function WSALookupServiceNextA( const hLookup : THandle; const dwControlFlags : DWORD; var dwBufferLength : DWORD; lpqsResults : PWSAQuerySetA ): Integer; stdcall;function WSALookupServiceNextW( const hLookup : THandle; const dwControlFlags : DWORD; var dwBufferLength : DWORD; lpqsResults : PWSAQuerySetW ): Integer; stdcall;function WSALookupServiceNext( const hLookup : THandle; const dwControlFlags : DWORD; var dwBufferLength : DWORD; lpqsResults : PWSAQuerySet ): Integer; stdcall;

function WSALookupServiceEnd( const hLookup : THandle ): Integer; stdcall;

function WSAInstallServiceClassA( const lpServiceClassInfo : LPWSAServiceClassInfoA ) : Integer; stdcall;function WSAInstallServiceClassW( const lpServiceClassInfo : LPWSAServiceClassInfoW ) : Integer; stdcall;function WSAInstallServiceClass( const lpServiceClassInfo : LPWSAServiceClassInfo ) : Integer; stdcall;

127

Page 128: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSARemoveServiceClass( const lpServiceClassId : PGUID ) : Integer; stdcall;

function WSAGetServiceClassInfoA( const lpProviderId : PGUID; const lpServiceClassId : PGUID; var lpdwBufSize : DWORD; lpServiceClassInfo : LPWSAServiceClassInfoA ): Integer; stdcall;function WSAGetServiceClassInfoW( const lpProviderId : PGUID; const lpServiceClassId : PGUID; var lpdwBufSize : DWORD; lpServiceClassInfo : LPWSAServiceClassInfoW ): Integer; stdcall;function WSAGetServiceClassInfo( const lpProviderId : PGUID; const lpServiceClassId : PGUID; var lpdwBufSize : DWORD; lpServiceClassInfo : LPWSAServiceClassInfo ): Integer; stdcall;

function WSAEnumNameSpaceProvidersA( var lpdwBufferLength: DWORD; const lpnspBuffer: LPWSANameSpace_InfoA ): Integer; stdcall;function WSAEnumNameSpaceProvidersW( var lpdwBufferLength: DWORD; const lpnspBuffer: LPWSANameSpace_InfoW ): Integer; stdcall;function WSAEnumNameSpaceProviders( var lpdwBufferLength: DWORD; const lpnspBuffer: LPWSANameSpace_Info ): Integer; stdcall;

function WSAGetServiceClassNameByClassIdA( const lpServiceClassId: PGUID; lpszServiceClassName: PChar; var lpdwBufferLength: DWORD ): Integer; stdcall;function WSAGetServiceClassNameByClassIdW( const lpServiceClassId: PGUID; lpszServiceClassName: PWideChar; var lpdwBufferLength: DWORD ): Integer; stdcall;function WSAGetServiceClassNameByClassId( const lpServiceClassId: PGUID; lpszServiceClassName: PMBChar; var lpdwBufferLength: DWORD ): Integer; stdcall;

function WSASetServiceA( const lpqsRegInfo: LPWSAQuerySetA; const essoperation: TWSAeSetServiceOp; const dwControlFlags: DWORD ): Integer; stdcall;function WSASetServiceW( const lpqsRegInfo: LPWSAQuerySetW; const essoperation: TWSAeSetServiceOp; const dwControlFlags: DWORD ): Integer; stdcall;function WSASetService( const lpqsRegInfo: LPWSAQuerySet; const essoperation: TWSAeSetServiceOp;

128

Page 129: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

const dwControlFlags: DWORD ): Integer; stdcall;

function WSAProviderConfigChange( var lpNotificationHandle : THandle; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ) : Integer; stdcall;

{ Macros }function WSAMakeSyncReply(Buflen, Error: Word): Longint;function WSAMakeSelectReply(Event, Error: Word): Longint;function WSAGetAsyncBuflen(Param: Longint): Word;function WSAGetAsyncError(Param: Longint): Word;function WSAGetSelectEvent(Param: Longint): Word;function WSAGetSelectError(Param: Longint): Word;

procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet);function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;procedure FD_SET(Socket: TSocket; var FDSet: TFDSet);procedure FD_ZERO(var FDSet: TFDSet);

{$include ws2tcpip.inc}{$include wsipx.inc}{$include wsnwlink.inc}{$include wsnetbs.inc}

implementation

function accept; external WINSOCK2_DLL name 'accept';function bind; external WINSOCK2_DLL name 'bind';function closesocket; external WINSOCK2_DLL name 'closesocket';function connect; external WINSOCK2_DLL name 'connect';function ioctlsocket; external WINSOCK2_DLL name 'ioctlsocket';function getpeername; external WINSOCK2_DLL name 'getpeername';function getsockname; external WINSOCK2_DLL name 'getsockname';function getsockopt; external WINSOCK2_DLL name 'getsockopt';function htonl; external WINSOCK2_DLL name 'htonl';function htons; external WINSOCK2_DLL name 'htons';function inet_addr; external WINSOCK2_DLL name 'inet_addr';function inet_ntoa; external WINSOCK2_DLL name 'inet_ntoa';function listen; external WINSOCK2_DLL name 'listen';function ntohl; external WINSOCK2_DLL name 'ntohl';function ntohs; external WINSOCK2_DLL name 'ntohs';

129

Page 130: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function recv; external WINSOCK2_DLL name 'recv';function recvfrom; external WINSOCK2_DLL name 'recvfrom';function select; external WINSOCK2_DLL name 'select';function send; external WINSOCK2_DLL name 'send';function sendto; external WINSOCK2_DLL name 'sendto';function setsockopt; external WINSOCK2_DLL name 'setsockopt';function shutdown; external WINSOCK2_DLL name 'shutdown';function socket; external WINSOCK2_DLL name 'socket';function gethostbyaddr; external WINSOCK2_DLL name 'gethostbyaddr';function gethostbyname; external WINSOCK2_DLL name 'gethostbyname';function gethostname; external WINSOCK2_DLL name 'gethostname';function getservbyport; external WINSOCK2_DLL name 'getservbyport';function getservbyname; external WINSOCK2_DLL name 'getservbyname';function getprotobynumber; external WINSOCK2_DLL name 'getprotobynumber';function getprotobyname; external WINSOCK2_DLL name 'getprotobyname';function WSAStartup; external WINSOCK2_DLL name 'WSAStartup';function WSACleanup; external WINSOCK2_DLL name 'WSACleanup';procedure WSASetLastError; external WINSOCK2_DLL name 'WSASetLastError';function WSAGetLastError; external WINSOCK2_DLL name 'WSAGetLastError';function WSAIsBlocking; external WINSOCK2_DLL name 'WSAIsBlocking';function WSAUnhookBlockingHook; external WINSOCK2_DLL name 'WSAUnhookBlockingHook';

function WSASetBlockingHook; external WINSOCK2_DLL name 'WSASetBlockingHook';function WSACancelBlockingCall; external WINSOCK2_DLL name 'WSACancelBlockingCall';function WSAAsyncGetServByName; external WINSOCK2_DLL name 'WSAAsyncGetServByName';function WSAAsyncGetServByPort; external WINSOCK2_DLL name 'WSAAsyncGetServByPort';function WSAAsyncGetProtoByName; external WINSOCK2_DLL name 'WSAAsyncGetProtoByName';

130

Page 131: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSAAsyncGetProtoByNumber; external WINSOCK2_DLL name 'WSAAsyncGetProtoByNumber';function WSAAsyncGetHostByName; external WINSOCK2_DLL name 'WSAAsyncGetHostByName';function WSAAsyncGetHostByAddr; external WINSOCK2_DLL name 'WSAAsyncGetHostByAddr';function WSACancelAsyncRequest; external WINSOCK2_DLL name 'WSACancelAsyncRequest';function WSAAsyncSelect; external WINSOCK2_DLL name 'WSAAsyncSelect';function __WSAFDIsSet; external WINSOCK2_DLL name '__WSAFDIsSet';

{ WinSock 2 API new function prototypes }function WSAAccept; external WINSOCK2_DLL name 'WSAAccept';function WSACloseEvent; external WINSOCK2_DLL name 'WSACloseEvent';function WSAConnect; external WINSOCK2_DLL name 'WSAConnect';function WSACreateEvent; external WINSOCK2_DLL name 'WSACreateEvent';function WSADuplicateSocketA; external WINSOCK2_DLL name 'WSADuplicateSocketA';function WSADuplicateSocketW; external WINSOCK2_DLL name 'WSADuplicateSocketW';function WSAEnumNetworkEvents; external WINSOCK2_DLL name 'WSAEnumNetworkEvents';function WSAEnumProtocolsA; external WINSOCK2_DLL name 'WSAEnumProtocolsA';function WSAEnumProtocolsW; external WINSOCK2_DLL name 'WSAEnumProtocolsW';function WSAEventSelect; external WINSOCK2_DLL name 'WSAEventSelect';function WSAGetOverlappedResult; external WINSOCK2_DLL name 'WSAGetOverlappedResult';function WSAGetQosByName; external WINSOCK2_DLL name 'WSAGetQosByName';function WSAhtonl; external WINSOCK2_DLL name 'WSAhtonl';function WSAhtons; external WINSOCK2_DLL name 'WSAhtons';function WSAIoctl; external WINSOCK2_DLL name 'WSAIoctl';function WSAJoinLeaf; external WINSOCK2_DLL name 'WSAJoinLeaf';function WSANtohl; external WINSOCK2_DLL name 'WSANtohl';

131

Page 132: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSANtohs; external WINSOCK2_DLL name 'WSANtohs';function WSARecv; external WINSOCK2_DLL name 'WSARecv';function WSARecvDisconnect; external WINSOCK2_DLL name 'WSARecvDisconnect';function WSARecvFrom; external WINSOCK2_DLL name 'WSARecvFrom';function WSAResetEvent; external WINSOCK2_DLL name 'WSAResetEvent';function WSASend; external WINSOCK2_DLL name 'WSASend';function WSASendDisconnect; external WINSOCK2_DLL name 'WSASendDisconnect';function WSASendTo; external WINSOCK2_DLL name 'WSASendTo';function WSASetEvent; external WINSOCK2_DLL name 'WSASetEvent';function WSASocketA; external WINSOCK2_DLL name 'WSASocketA';function WSASocketW; external WINSOCK2_DLL name 'WSASocketW';function WSAWaitForMultipleEvents; external WINSOCK2_DLL name 'WSAWaitForMultipleEvents';function WSAAddressToStringA; external WINSOCK2_DLL name 'WSAAddressToStringA';function WSAAddressToStringW; external WINSOCK2_DLL name 'WSAAddressToStringW';function WSAStringToAddressA; external WINSOCK2_DLL name 'WSAStringToAddressA';function WSAStringToAddressW; external WINSOCK2_DLL name 'WSAStringToAddressW';

{ Registration and Name Resolution API functions }function WSALookupServiceBeginA; external WINSOCK2_DLL name 'WSALookupServiceBeginA';function WSALookupServiceBeginW; external WINSOCK2_DLL name 'WSALookupServiceBeginW';function WSALookupServiceNextA; external WINSOCK2_DLL name 'WSALookupServiceNextA';function WSALookupServiceNextW; external WINSOCK2_DLL name 'WSALookupServiceNextW';function WSALookupServiceEnd; external WINSOCK2_DLL name 'WSALookupServiceEnd';function WSAInstallServiceClassA; external WINSOCK2_DLL name 'WSAInstallServiceClassA';

132

Page 133: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSAInstallServiceClassW; external WINSOCK2_DLL name 'WSAInstallServiceClassW';function WSARemoveServiceClass; external WINSOCK2_DLL name 'WSARemoveServiceClass';function WSAGetServiceClassInfoA; external WINSOCK2_DLL name 'WSAGetServiceClassInfoA';function WSAGetServiceClassInfoW; external WINSOCK2_DLL name 'WSAGetServiceClassInfoW';function WSAEnumNameSpaceProvidersA; external WINSOCK2_DLL name 'WSAEnumNameSpaceProvidersA';function WSAEnumNameSpaceProvidersW; external WINSOCK2_DLL name 'WSAEnumNameSpaceProvidersW';function WSAGetServiceClassNameByClassIdA; external WINSOCK2_DLL name 'WSAGetServiceClassNameByClassIdA';function WSAGetServiceClassNameByClassIdW; external WINSOCK2_DLL name 'WSAGetServiceClassNameByClassIdW';function WSASetServiceA; external WINSOCK2_DLL name 'WSASetServiceA';function WSASetServiceW; external WINSOCK2_DLL name 'WSASetServiceW';

{$IFDEF UNICODE}function WSADuplicateSocket; external WINSOCK2_DLL name 'WSADuplicateSocketW';function WSAEnumProtocols; external WINSOCK2_DLL name 'WSAEnumProtocolsW';function WSASocket; external WINSOCK2_DLL name 'WSASocketW';function WSAAddressToString; external WINSOCK2_DLL name 'WSAAddressToStringW';function WSAStringToAddress; external WINSOCK2_DLL name 'WSAStringToAddressW';function WSALookupServiceBegin; external WINSOCK2_DLL name 'WSALookupServiceBeginW';function WSALookupServiceNext; external WINSOCK2_DLL name 'WSALookupServiceNextW';function WSAInstallServiceClass; external WINSOCK2_DLL name 'WSAInstallServiceClassW';function WSAGetServiceClassInfo; external WINSOCK2_DLL name 'WSAGetServiceClassInfoW';function WSAEnumNameSpaceProviders; external WINSOCK2_DLL name 'WSAEnumNameSpaceProvidersW';

133

Page 134: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSAGetServiceClassNameByClassId; external WINSOCK2_DLL name 'WSAGetServiceClassNameByClassIdW';function WSASetService; external WINSOCK2_DLL name 'WSASetServiceW';{$ELSE}function WSADuplicateSocket; external WINSOCK2_DLL name 'WSADuplicateSocketA';function WSAEnumProtocols; external WINSOCK2_DLL name 'WSAEnumProtocolsA';function WSASocket; external WINSOCK2_DLL name 'WSASocketA';function WSAAddressToString; external WINSOCK2_DLL name 'WSAAddressToStringA';function WSAStringToAddress; external WINSOCK2_DLL name 'WSAStringToAddressA';function WSALookupServiceBegin; external WINSOCK2_DLL name 'WSALookupServiceBeginA';function WSALookupServiceNext; external WINSOCK2_DLL name 'WSALookupServiceNextA';function WSAInstallServiceClass; external WINSOCK2_DLL name 'WSAInstallServiceClassA';function WSAGetServiceClassInfo; external WINSOCK2_DLL name 'WSAGetServiceClassInfoA';function WSAEnumNameSpaceProviders; external WINSOCK2_DLL name 'WSAEnumNameSpaceProvidersA';function WSAGetServiceClassNameByClassId; external WINSOCK2_DLL name 'WSAGetServiceClassNameByClassIdA';function WSASetService; external WINSOCK2_DLL name 'WSASetServiceA';{$ENDIF}

function WSAProviderConfigChange; external WINSOCK2_DLL name 'WSAProviderConfigChange';

function WSAMakeSyncReply;begin WSAMakeSyncReply:= MakeLong(Buflen, Error);end;function WSAMakeSelectReply;begin WSAMakeSelectReply:= MakeLong(Event, Error);end;

134

Page 135: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

function WSAGetAsyncBuflen;begin WSAGetAsyncBuflen:= LOWORD(Param);end;

function WSAGetAsyncError;begin WSAGetAsyncError:= HIWORD(Param);end;

function WSAGetSelectEvent;begin WSAGetSelectEvent:= LOWORD(Param);end;function WSAGetSelectError;begin WSAGetSelectError:= HIWORD(Param);end;

procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet);var i: DWORD;begin i := 0; while i < FDSet.fd_count do begin if FDSet.fd_array[i] = Socket then begin while i < FDSet.fd_count - 1 do begin FDSet.fd_array[i] := FDSet.fd_array[i+1]; Inc(i); end; Dec(FDSet.fd_count); Break; end; Inc(i); end;end;function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;begin

135

Page 136: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Result := __WSAFDIsSet(Socket, FDSet);end;

procedure FD_SET(Socket: TSocket; var FDSet: TFDSet);begin if FDSet.fd_count < FD_SETSIZE then begin FDSet.fd_array[FDSet.fd_count] := Socket; Inc(FDSet.fd_count); end;end;procedure FD_ZERO(var FDSet: TFDSet);begin FDSet.fd_count := 0;end;// A macro convenient for setting up NETBIOS SOCKADDRs.procedure SET_NETBIOS_SOCKADDR( snb : PSOCKADDR_NB; const SnbType : Word; const Name : PChar; const Port : Char );var len : Integer;begin if snb<>nil then with snb^ do begin snb_family := AF_NETBIOS; snb_type := SnbType; len := StrLen(Name); if len>=NETBIOS_NAME_LENGTH-1 then System.Move(Name^,snb_name,NETBIOS_NAME_LENGTH-1) else begin if len>0 then System.Move(Name^,snb_name,len); FillChar( (PChar(@snb_name)+len)^, NETBIOS_NAME_LENGTH-1-len, ' ' ); end; snb_name[NETBIOS_NAME_LENGTH-1] := Port; end;end;end.

136

Page 137: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

Список литературыОсновная литература

1. Фленов М.Е. Программирование в глазами хакера. СПб.: БХВ - Петербург,2004. –368 с.

2. Бобровский С. Технология Петагона на службе российских программистов. Программная инженерия.-СПб.:Питер,2003.-222с.

3. Материалы сайта http://www. delphi - jedi . org 4. Материалы сайта http://www. delphibest . narod . ru 5. Материалы сайта

http://www. iatp . kharkov . ua / sites / program / program / titul . htm 6. Материалы сайта http://www.uran.donetsk.ua.7. Материалы сайта

http://www.lib.aswl.ru/books/methodology/programming.8. Материалы электронного журнала vr-online.9. Острейковский В.А. Информатика: Учеб. для вузов. – М.:

Высш.шк., 1999.-511 с.10.Симонович С.В. Информатика. Базовый курс. Учебник для

вузов. –СПб: Издательство «Питер», 1999.-640 с.11.Фути К., Судзуки Н. Языки программирования и схемотехника

СБИС. Пер. с япон.-М.:Мир,1988.-224 с., ил.12.Reference material from IBM

Дополнительная литература13.Denning 1989 - Denning P., et al. Computing as a Discipline //

CACM, January, 1989. V. 32, N 1, pp. 9-23. 14. Glass 1996 - Robert L. Glass. The Relation Between Theory and

Practice in Software Engineering. // CACM, November 1996. V. 39, N 11, pp. 11-13.

15. Tucker 1991 - Tucker A., et al. Computing Curricula 1991, Report of the ACM/IEEE-CS Joint Curriculum Task Force, ACM Press, N. Y. 1991.

137

Page 138: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

СОДЕРЖАНИЕ

Пояснительная записка...............................................................................3Тема №2 Современные методы оптимизации программ.......................4Тема №3 Новые возможности системного программирования..............5Тема №4 Сетевое программирование: сетевые утилиты......................16Тема № 5 Программирование сетевых приложений на низком уровне.....................................................................................................................24Список литературы.................................................................................137

138

Page 139: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

139

Page 140: Министерство образования и наукиpsu.kz/arm/upload/umk/87600.doc · Web viewМетодические указания Форма Ф СО ПГУ 7.18.2/05

140