Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

СКАНИРОВАНИЕ ресурсов ИС

Читайте также:
  1. Анализ и выравнивание загрузки ресурсов
  2. Анализ использования трудовых ресурсов на предприятиях морского транспорта
  3. Анализ использования трудовых ресурсов.
  4. Анализ показателей эффективности использования производственных ресурсов
  5. Анализ трудовых ресурсов предприятия
  6. Виды туристских ресурсов. Обеспеченность туристскими ресурсами Калининградской области
  7. Глава 17. Организация НИОКР при ограниченных финансовых ресурсов.

ФИЛИАЛ

ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО

ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНДУСТРИАЛЬНЫЙ УНИВЕРСИТЕТ»

В г. РОСЛАВЛЕ СМОЛЕНСКОЙ ОБЛАСТИ

(ФИЛИАЛ ФГБОУ ВПО «МГИУ» в г. РОСЛАВЛЕ)

ОТЧЕТ

ЗАДАНИЕ НА ЗАНЯТИЕ № 3/26

СКАНИРОВАНИЕ ресурсов ИС

Тема: « корпоративные информационные системы »

Выполнил

Студент 42 группы

Слабодчиков А.А

Рославль 2013

Дисциплина «Корпоративные информационные системы»

ЗАДАНИЕ НА ЗАНЯТИЕ № 3/26

СКАНИРОВАНИЕ ресурсов ИС

В работе реализуется метод открытого сканирования сети «TCP SYN». Этот метод состоит в последовательной передаче на объект сканирования SYN-запроса для создания соединений на различных портах (вызов функции connect).

Возможны следующие реализации метода открытого сканирования «TCP SYN»:

· последовательный вызов функции connect c различными номерами портов. Недостатком этого метода является медленная работа приложения, так как новое соединение создается только после того, как создано предыдущее соединение;

· использование асинхронных сетевых функций. При вызове функции connect в асинхронном режиме ОС посылает запрос на установление соединения с сервером и, не дожидаясь реального соединения, продолжает работать дальше. Недостаток этого метода – надо самому проверять результат работы функции. Это несколько усложняет программный код;

· создание многопоточного сканера. В этом случае для сканирования очередного порта создается новый поток.

В работе реализован последний из рассмотренных методов.

 

1. Создание многопоточного приложения для сканирования сети

При создании многопоточного приложения для сканирования сети выполните следующие пункты.

1) Создайте проект (New Application) (рис. 1).

2) В разделе uses подключите библиотеку: Winsock.

3) В разделе VAR добавьте глобальную переменную i – номер очередного проверяемого порта

 

var

Form1: TForm1;

i: Integer; {номер очередного порта}

implementation.

 

unit Code;

interface

uses

Windows, Messages, SysUtils, Classes, Controls, Forms,

StdCtrls, ExtCtrls, WinSock, AppEvnts, Buttons, Gauges, Spin;

type

TForm1 = class(TForm)

Panel1: TPanel;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

SpeedButton1: TSpeedButton;

ListBox1: TListBox;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

Label3: TLabel;

Label4: TLabel;

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure ApplicationEvents1Message(var Msg: tagMSG;

var Handled: Boolean);

procedure SpeedButton1Click(Sender: TObject);

end;

TMyThread = class(TThread)

protected

procedure Execute; override;

end;

TFSocket = record

sa: TSockAddr;

FData: integer;

TimeOut: integer;

end;

const

MAX_PORTS=500;

Ping=5000;

var

Form1: TForm1;

FSocket: array [0..MAX_PORTS - 1] of TFSocket;

FPort: WORD;

FInfo: TWSADATA;

FHost: integer;

FPStart, FPEnd: WORD;

SThread: TMyThread;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;

var Handled: Boolean);

begin

if (Msg.message>=FPStart+WM_USER) //идентификатор посылает на порт сообщения к юзеру

and (Msg.message<=FPEnd+WM_USER) //идентификатор посылает на порт сообщения от юзера

then

if WSAGETSELECTERROR(Msg.lParam)=0 //для связи с соккетом

then

case WSAGETSELECTEVENT(msg.lParam) of

FD_CONNECT: //соединение сокетного события

begin

ListBox1.Items.Add(IntToStr(ListBox1.Count+1)+

') IP: '+inet_ntoa(FSocket[0].sa.sin_addr)+' | '+

'Port: '+intToStr(Msg.message - WM_USER));

Application.ProcessMessages;

end;

end;

Handled:=false;

end;

procedure TForm1.FormCreate(Sender: TObject);

var

i: integer;

begin

if WSAStartup(MAKEWORD(2, 0), FInfo)<>0 //короч для инициализации соккетов

then Halt;

for i:=0 to MAX_PORTS-1 do

with FSocket[i] do

begin

TimeOut:= 0;

FData:= Socket(AF_INET, SOCK_STREAM, 0); //задаеться ипи адрес

if FData = SOCKET_ERROR

then

begin

WSACleanup;

Halt;

end;

end;

Application.OnMessage:=Form1.ApplicationEvents1Message;

end;

procedure TForm1.FormDestroy(Sender: TObject);

var

i: integer;

begin

if SThread<>nil

then

begin

SThread.Terminate;

SThread.WaitFor;

SThread:=nil;

end;

for i:=0 to MAX_PORTS-1 do

CloseSocket(FSocket[i].FData);

WSACleanup;

end;

procedure InitSockets;

var

i: integer;

begin

for i:=0 to MAX_PORTS-1 do

with FSocket[i] do

if (FPort>=FPEnd) or (SThread.Terminated)

then break

else

if GetTickCount-TimeOut>PING

then

begin //связываеться соккет, готовность соединения для чтения и записи

sa.sin_family:=AF_INET;

sa.sin_addr.S_addr:=FHost;

sa.sin_port:=htons(FPort);

WSAAsyncSelect(FData, Application.Handle, WM_USER+FPort, FD_CONNECT);

connect(FData, FSocket[i].sa, SizeOf(FSocket[i].sa));

TimeOut:=GetTickCount;

inc(FPort);

Form1.Label2.Caption:='Port: '+intToStr(FPort);

Application.ProcessMessages;

Sleep(PING div MAX_PORTS);

end;

end;

procedure TMyThread.Execute; //Многопоточная обработка отправка пакетов на порты

var

i: integer;

buf: in_addr;

begin

FPStart:=Form1.SpinEdit1.Value;

FPEnd:=Form1.SpinEdit2.Value;

FHost:=inet_addr(PChar(Form1.Edit1.Text));

if (FPEnd<=FPStart)or (Form1.SpinEdit1.Value>40000) or

(Form1.SpinEdit2.Value>40000)

then FHost:=SOCKET_ERROR;

if FHost=SOCKET_ERROR

then

begin

if not Terminated

then SThread:=nil;

Form1.SpeedButton1.Caption:='Запуск';

Exit;

end;

buf.S_addr:=FHost;

Form1.Edit1.Text:=inet_ntoa(buf);

Form1.ListBox1.Clear;

FPort:=FPStart;

for i:=0 to MAX_PORTS-1 do

with FSocket[i] do

begin

TimeOut:=0;

FData:=Socket(AF_INET, SOCK_STREAM, 0);

end;

while not Terminated do

begin

InitSockets;

if FPort>=FPEnd

then break;

end;

for i:=0 to MAX_PORTS-1 do

CloseSocket(FSocket[i].FData);

if not Terminated

then

begin

SThread:=nil;

Form1.SpeedButton1.Caption:='Запуск';

end;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

if SThread=nil

then

begin

SThread:=TMyThread.Create(false);

SpeedButton1.Caption:='Стоп';

end

else

begin

SThread.Terminate;

SThread.WaitFor;

SThread:=nil;

SpeedButton1.Caption:='Запуск';

end;

end;

 

 

end.

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

 

1. Можно ли с помощью разработанной программы сканировать UDP-порты?

Да можно, программой предусмотрена отправка пакетных данных.

2. Какое максимальное количество портов можно сканировать с помощью разработанной программы?

32000 из за ограничений оператора integer

3. Объясните принцип работы многопоточных программ.

Многопоточность (как доктрину программирования) не следует путать ни с многозадачностью, ни с многопроцессорностью, несмотря на то, что операционные системы, реализующие многозадачность, как правило реализуют и многопоточность.

К достоинствам многопоточности в программировании можно отнести следующее:

Упрощение программы в некоторых случаях за счет использования общего адресного пространства.

Меньшие относительно процесса временны́е затраты на создание потока.

Повышение производительности процесса за счет распараллеливания процессорных вычислений и операций ввода/вывода.

Существуют всего две цели, которые преследуют программисты, используя потоки:

позволить приложению параллельно работать над несколькими относительно независимыми задачами;

использовать преимущества многопроцессорных систем для повышения производительности приложения.

Как не парадоксально это может показаться на первый взгляд, но две эти задачи ортогональны друг другу и даже могут вступать в противоречие. Поэтому, еще на этапе проектирования вы должны определиться с приоритетами этих задач, так как это и определит всю структуру приложения.

 

4. Как определить адреса компьютеров сети?

 

1. В командной строке набрать ipconfig /all и смотреть IP адрес. Пакажет все сетевые подключения
2. Встать на сетевые подключения нажать правую кнопку мыши, открыть свойства. Выбрать нужное сетевое подключене, аналогично зайти в свойства. Выбрать Протокол TCP/IP нажать кнопку свойства.

 


Дата добавления: 2015-09-01; просмотров: 45 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Прочитайте тексты 1, 2, 3.| Классификация

mybiblioteka.su - 2015-2024 год. (0.035 сек.)