- •Аннотация
- •Реферат
- •Содержание
- •Введение
- •1 Анализ технического задания
- •1.1 Структура вычислительной сети предприятия
- •1.2 Основные информационные потоки предприятия
- •1.3 Угрозы безопасности и уязвимости элементов вс
- •2 Обеспечение безопасности лвс при подключении к Internet
- •2.1 Планирование сети
- •2.2 Защита пограничного хоста
- •2.4 Настройка сетевых установок
- •2.4 Обоснование разработки
- •3 Проектирование программы
- •3.1 Система проверки уязвимостей.
- •3.2.1 Общие сведения
- •3.2.2 Распространенные уязвимости
- •4 Алгоритмы и результаты работы с программы
- •4.1 Выбор среды разработки
- •4.2. Алгоритм работы сканера защищиности.
- •4.2 Руководство пользователя.
- •5 Технико-экономическое обоснование проекта
- •5.2 Выбор аналога для сравнения характеристик
- •5.3 Выбор критериев и сравнение продуктов
- •5.4 Расчет экономического эффекта
- •5.4.1 Ожидаемый экономический эффект
- •5.4.2 Состав эксплуатационных расходов
- •5.4.3 Расчет экономии от увеличения производительности труда пользователя
- •5.4.4 Расчет затрат на этапе проектирования
- •5.5 Определение цены программного продукта.
- •5.5.1 Расчет трудоемкости разработки программного продукта
- •5.5.2 Определение продажной цены
- •6 Безопасность и экологичность проекта
- •6.1 Анализ показателей напряженности трудового процесса для программиста
- •6.2 Разработка мероприятий по улучшению условий труда
- •6.3 Пожаробезопасность разработки проекта
- •6.4 Защита окружающей природной среды
- •Заключение
- •Список использованных источников
- •Приложение а
Приложение а
Исходные тексты сетевого сканера защищенности.
unit cgi;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, Psock, NMHttp;
type
TForm2 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Button1: TButton;
Memo1: TMemo;
H1: TNMHTTP;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
i:integer;
s:string;
f:text;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
if Button1.Caption='Стоп' then
begin
Button1.Caption:='Старт';
i:=727;
exit;
end;
Button1.Caption:='Стоп';
Memo1.Lines.Add('В базе 726 уязвимостей');
Memo1.Lines.Add(DateToStr(Date)+' '+TimeToStr(Time));
Memo1.Lines.Add('Поиcк уязвимостей на '+Edit1.Text);
H1.Host:=Edit1.Text;
{----
{----}
assignfile(f,'cgi.txt');
reset(f);
i:=1;
readln(f,s);
while i<727 do
begin
readln(f,s);
Label3.Caption:=IntToStr(i)+' : '+s;
H1.Head(H1.Host+s);
if H1.ReplyNumber=200 then Memo1.Lines.Add(H1.Host+':'+IntToStr(H1.Port)+s);
i:=i+1;
application.ProcessMessages;
end;
Memo1.Lines.Add(DateToStr(Date)+' '+TimeToStr(Time));
closefile(f);
end;
end.
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, ComCtrls, ToolWin, ImgList,winsock, IniFiles, unit1,
Psock, NMHttp;
type
Tfmain = class(TForm)
MMenu: TMainMenu;
mm_file: TMenuItem;
m_save: TMenuItem;
N3: TMenuItem;
mm_help: TMenuItem;
m_about: TMenuItem;
Panel1: TPanel;
l_addr: TLabel;
memo_res: TMemo;
tlb_main: TToolBar;
tb_start: TToolButton;
tb_addrdiap: TToolButton;
ImageList1: TImageList;
e_addr: TComboBox;
m_exit: TMenuItem;
NMHTTP1: TNMHTTP;
mm_util: TMenuItem;
m_cgi: TMenuItem;
procedure tb_startClick(Sender: TObject);
procedure m_exitClick(Sender: TObject);
procedure tb_addrdiapClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure e_addrExit(Sender: TObject);
procedure e_addrKeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure m_aboutClick(Sender: TObject);
procedure m_cgiClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
one:integer=1;
var
fmain: Tfmain;
pT:THandle; //эти две переменные
idTh:cardinal; //для создания и работа с потоком
inifile:TIniFile; //переменная для ини файла
histfile:text; //переменная для текстого файла с историей хостов
index,last:integer;//номера первого(он же текущий) и последнего портов
AddrList:TStringList;//надо создавать глобально - при старте
procedure portscan;
procedure read_ini;
procedure write_ini;
procedure read_history;
procedure write_history;
procedure add_address(address:string);//добавляет новый адрес в АддрЛист...
//добавление в комбо надо прописать отдельно
function read_osdetect_log:string;
implementation
uses Addr, cgi;
{$R *.DFM}
function read_osdetect_log:string;
var
log:text;
s:string;
begin
assign(log,'log.txt');
reset(log);
repeat
readln(log,s);
until copy(s,1,6)<>'Remote';
read_osdetect_log:=s;
closefile(log);
{-------}
assign(log,'log.txt');
rewrite(log);
closefile(log);
end;
procedure add_address(address:string);
var
i:integer;
begin
{если список пуст изначально}
if AddrList.Count=0 then
begin
AddrList.Add(address);
exit;
end;
{проверяем, есть ли такой адрес}
i:=0;
repeat
if address=AddrList.Strings[i] then break;
i:=i+1;
until i>AddrList.Count-1;
if i=AddrList.Count{нет такого адреса в списке - добавим}
then AddrList.Add(address);
end;
procedure read_history;
Var
S:string;
begin
assign(histfile,ExtractFilePath(Application.ExeName)+'history.txt');
reset(histfile);
while not(Eof(histfile)) do
begin
readln(histfile,s);
AddrList.Add(S);
end;
closefile(histfile);
end;
procedure write_history;
var
i:integer;
begin
assign(histfile,ExtractFilePath(Application.ExeName)+'history.txt');
rewrite(histfile);
for i:=0 to AddrList.Count-1 do
writeln(histfile,AddrList.Strings[i]);
closefile(histfile);
end;
procedure read_ini;
begin
inifile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'scaner.ini');
{do something}
fmain.e_addr.text:=inifile.ReadString('Settings','LastAddress','');
index:=inifile.ReadInteger('Settings','FirstPort',20);
last:=inifile.ReadInteger('Settings','LastPort',30);
inifile.Destroy;
end;
procedure write_ini;
begin
inifile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'scaner.ini');
{do something}
inifile.WriteString('Settings','LastAddress',fmain.e_addr.Text);
inifile.WriteInteger('Settings','FirstPort',faddr.SpinEdit1.Value);
inifile.WriteInteger('Settings','LastPort',faddr.SpinEdit2.Value);
inifile.Destroy;
end;
procedure portscan;
var
InitData:WSADATA;
ws:TSocket;
addrport:TSockAddrIn;
host:PHostEnt;
addr:PChar;
begin
{инициализируем библиотеку}
if WSAStartup($101, InitData)<>0 then
begin
ShowMessage('Error inicialization');
closehandle(pT);
exit;
end;
{создаем сокет}
ws:=socket(AF_INET, SOCK_STREAM,0);
if ws=INVALiD_SOCKET then
begin
ShowMessage('Socket error');
terminatethread(pT,0);
exit;
end;
addrport.sin_family := AF_INET;
if Fmain.e_addr.Text='' then
begin
ShowMessage('Введите имя хоста или его IP-адрес');
terminatethread(pT,0);
// closehandle(pT);
exit;
end;
{если у нас введен не ип, а имя хоста}
if inet_addr(PChar(Fmain.e_addr.Text))=-1
then
begin
host:=gethostbyname(PChar(Fmain.e_addr.Text));
addr := host^.h_addr_list^;
addrport.sin_addr.s_addr:=inet_addr(PChar(Format ('%d.%d.%d.%d', [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])])));
end
else
addrport.sin_addr.s_addr := inet_addr(PChar(Fmain.e_addr.Text));
while index<=last do
begin
addrport.sin_port := htons(index);
Fmain.memo_res.Lines.Delete(0);
Fmain.memo_res.Lines.Insert(0,'обрабатывается порт №'+IntToStr(index));
if connect(ws,addrport,sizeof(addrport))=0 then
Fmain.memo_res.Lines.Add('Открыт порт '+IntToStr(index));
Application.ProcessMessages;
index:=index+1;
end;{while}
Fmain.memo_res.Lines.Add('Сканирование портов завершено');
WSACleanup;
closesocket(ws);
terminatethread(pT,0);
end;{procedure}
procedure Tfmain.tb_startClick(Sender: TObject);
begin
if tag=1 then tag:=0 else tag:=1;
if tag=1 {прцесс стоит - запустим его} then
begin
tb_start.hint:='стоп';
{запускаем сканирование портов}
pT:=createthread(nil,0,@portscan,@one,0,idth);
{------}
{пока сканит - добавим адрес в лист, если надо}
add_address(e_addr.Text);
e_addr.Items:=AddrList;
end
else {процесс идет - замочим его}
begin
tb_start.hint:='старт';
terminatethread(pT,0);
end;
end;
procedure Tfmain.m_exitClick(Sender: TObject);
begin
if pT<>0 then terminatethread(pT,0);
write_ini;
write_history;
AddrList.Destroy;
Application.Terminate;
end;
procedure Tfmain.tb_addrdiapClick(Sender: TObject);
begin
inifile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'scaner.ini');
faddr.SpinEdit1.Value:=inifile.ReadInteger('Settings','FirstPort',20);
faddr.SpinEdit2.Value:=inifile.ReadInteger('Settings','LastPort',30);;
inifile.Destroy;
faddr.show;
end;
procedure Tfmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if pT<>0 then terminatethread(pT,0);
write_ini;
write_history;
AddrList.Destroy;
end;
procedure Tfmain.FormCreate(Sender: TObject);
begin
read_ini;
AddrList:=TStringList.Create;
read_history;
e_addr.Items:=AddrList;
end;
procedure Tfmain.e_addrExit(Sender: TObject);
begin
add_address(e_addr.Text);
e_addr.Items:=AddrList;
end;
procedure Tfmain.e_addrKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
add_address(e_addr.Text);
e_addr.Items:=AddrList;
end;
end;
procedure Tfmain.Button1Click(Sender: TObject);
begin
winexec(PChar('osdetect.exe -sS -v -O www.tsure.ru -oN log.txt'),SW_HIDE);
end;
procedure Tfmain.m_aboutClick(Sender: TObject);
begin
AboutBox.Show;
end;
procedure Tfmain.m_cgiClick(Sender: TObject);
begin
Form2.show;
end;