Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка.doc
Скачиваний:
10
Добавлен:
07.12.2018
Размер:
4.36 Mб
Скачать

Приложение а

Исходные тексты сетевого сканера защищенности.

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;

8