рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Текст программы

Текст программы - раздел Информатика, Лекция Программная реализация программы типа NetStat Unit Unit1;   Interface   Uses...

unit Unit1;

 

interface

 

uses

WinTypes,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, Grids, ComCtrls, ExtCtrls,winsock;

 

type

// Описание соединения

PTMibTCPRow = ^TMibTCPRow;

TMibTCPRow = packed record

dwState: DWORD;

dwLocalAddr: DWORD;

dwLocalPort: DWORD;

dwRemoteAddr: DWORD;

dwRemotePort: DWORD;

end;

 

// Структура содержит количество и массив описаний соединений

PTMibTCPTable = ^TMibTCPTable;

TMibTCPTable = packed record

dwNumEntries: DWORD;

Table: array[0..0] of TMibTCPRow;

end;

 

PTMibUDPRow = ^TMibUDPRow;

TMibUDPRow = packed record

dwLocalAddr: DWORD;

dwLocalPort: DWORD;

end;

 

PTMibUDPTable = ^TMIBUDPTable;

TMIBUDPTable = packed record

dwNumEntries: DWORD;

UDPTable: array[0..0] of TMibUDPRow;

end;

 

 

TForm1 = class(TForm)

BitBtn1: TBitBtn;

RadioGroup1: TRadioGroup;

StatusBar1: TStatusBar;

TCP: TRadioButton;

UDP: TRadioButton;

Label1: TLabel;

StringGrid1: TStringGrid;

 

procedure BitBtn1Click(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

TCPConnState: // Connection state type

array[1..12] of string =

('Closed', 'Listening', 'Syn_Sent',

'Syn_Rcvd', 'Established', 'Fin_Wait1',

'Fin_Wait2', 'Close_Wait', 'Closing',

'Last_Ack', 'Time_Wait', 'Delete_Tcb'

);

 

implementation

 

{$R *.DFM}

 

// получает доменное имя по IP

function IPAddrToName(IPAddr : DWORD;Local:Bool): string;

var

SockAddrIn : TSockAddrIn;

HostEnt : PHostEnt;

WSAData : TWSAData;

Address : in_addr;

Name : array[0..255] of Char;

Length : DWord;

 

begin

if ((IPAddr = 0) or (IPAddr = 16777343)) and Local then //127.0.0.1

begin

Length:= sizeof(Name);

if GetComputerName(Name,Length) Then

result:=StrPas(Name);

Exit;

end;

 

Address.s_addr := IPAddr;

WSAStartup($101, WSAData);

SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(inet_ntoa(Address)));

HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, sizeof(SockAddrIn.sin_addr.S_addr), AF_INET);

if HostEnt <> nil then

begin

WSACleanup;

result := StrPas(Hostent^.h_name)

end

else

begin

WSACleanup;

result:=inet_ntoa(Address)

end;

end;

 

//получаем имя протокола по открытому порту и протоколу UDP или TCP

function GetPort(port: DWORD; proto:PChar): string;

var

wsdata : TWSAData;

ServEnt : PServEnt;

begin

WSAStartup ($101, wsdata);

ServEnt := GetServByPort(port,proto);

if ServEnt <> nil then

begin

WSACleanup;

Result := ServEnt^.s_name;

end

else

begin

WSACleanup;

Result := IntToStr(htons(port));

end;

end;

 

procedure TForm1.BitBtn1Click(Sender: TObject);

var

GetTcpTable: function(Table: PTMibTCPTable; dwSize: PDWORD; bOrder: BOOL): DWORD; stdcall;

GetUdpTable: function(Table: PTMibUDPTable; dwSize: PDWORD; bOrder: BOOL): DWORD; stdcall;

 

TableSize,

Error : DWORD;

TCPTable : PTMibTCPTable;

UdpTable: PTMibUDPTable;

i: DWORD;

 

begin

StringGrid1.RowCount:=0;

StringGrid1.Cells[0,0]:='Имя';

StringGrid1.Cells[1,0]:='Локальный адрес';

StringGrid1.Cells[2,0]:='Внешний адрес';

StringGrid1.Cells[3,0]:='Состояние';

if TCP.Checked = true then

begin

GetTcpTable := GetProcAddress(LoadLibrary('iphlpapi.dll'), 'GetTcpTable');

TableSize := 0;

Error := GetTCPTable(nil, @TableSize , false);

if Error <> ERROR_INSUFFICIENT_BUFFER then Exit;

 

try

GetMem(TcpTable, TableSize);

 

if GetTCPTable(TcpTable, @TableSize,TRUE) = NO_ERROR then

begin

 

for i := 0 to TcpTable.dwNumEntries - 1 do

begin

if TcpTable.Table[i].dwRemoteAddr = 0 then TcpTable.Table[i].dwRemotePort := 0;

 

StringGrid1.RowCount:=StringGrid1.RowCount+1;

StringGrid1.Cells[0,i+1]:='TCP';

StringGrid1.Cells[1,i+1]:=IPAddrToName(TcpTable.Table[i].dwLocalAddr,true)+':'+GetPort(TcpTable.Table[i].dwLocalPort,'TCP');

StringGrid1.Cells[2,i+1]:=IPAddrToName(TcpTable.Table[i].dwRemoteAddr,false)+':'+IntToStr(htons(TcpTable.Table[i].dwRemotePort));

StringGrid1.Cells[3,i+1]:=pchar(TCPConnState[TcpTable.Table[i].dwState]);

 

end;

 

end;

 

finally

FreeMem(TcpTable);

end;

end;

 

 

if UDP.Checked = true then

begin

GetUdpTable := GetProcAddress(LoadLibrary('iphlpapi.dll'), 'GetUdpTable');

TableSize := 0;

Error := GetUdpTable(nil, @TableSize , false);

if Error <> ERROR_INSUFFICIENT_BUFFER then Exit;

try

GetMem(UdpTable, TableSize);

if GetUdpTable(UdpTable, @TableSize, TRUE) = NO_ERROR then

begin

for i := 0 to UdpTable.dwNumEntries - 1 do

begin

StringGrid1.RowCount:=StringGrid1.RowCount+1;

StringGrid1.Cells[0,i+1]:='UDP';

StringGrid1.Cells[1,i+1]:=IPAddrToName(UdpTable.UDPTable[i].dwLocalAddr,true)

+':'+GetPort(UdpTable.UDPTable[i].dwLocalPort,'UDP');

StringGrid1.Cells[2,i+1]:='*.*';

StringGrid1.Cells[3,i+1]:='';

 

end;

end;

finally

FreeMem(UdpTable);

end;

end;

 

 

end;

 

end.

 

Результат работы сделанного индивидуального задания:

– Конец работы –

Эта тема принадлежит разделу:

Лекция Программная реализация программы типа NetStat

Теоретические данные NetStat выполняет трассировку маршрута к указанному узлу... Рис Схема алгоритма программы...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Текст программы

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Теоретические данные.
  NetStat - выполняет трассировку маршрута к указанному узлу. NETSTAT[-a][-e][-n][-s][-p имя][-r][интервал] Параметры: -a - Отображение всех подключений и о

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги