您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页入侵检测课程设计

入侵检测课程设计

来源:爱go旅游网
一、Snort的安装、配置和使用

1.1 实验目的 (1) 掌握在linux下的snort工具的安装、配置、使用方法,实现捕捉Telnet、FTP、HTTP等协议的数据包。 (2) 利用snort的检测功能,完成对一些攻击的检测.加深对各种攻击软件的了解. (3) 配合课堂授课内容,全面了解snort这个著名的开源入侵检测工具的实现方法和原理. (4) 为利用第三方软件分析进一步分析数据打下基础。 1.2 实验内容 (1) 进一步熟悉linux下的基本命令,安装配置snort (2) 掌握Snort作为嗅探器和数据包记录器方式的使用方法, 及主要命令参数的含义。 (3) 比较snort和tcpdump有何不同。 (4) 打开/etc/snort.conf, 理解Snort.conf文件中的相关配置参数。 (5) 掌握snort的入侵检测工作方式的命令行使用方法。 (6)自已编写一个规则, 并利用此规则进行检测,产生报警日志 1.3 实验要求 (1) 认真完成所规定的实验内容。 (2) 使用Snort作为嗅探器和数据包记录器方式的命令捕获数据包。 (3) 通过采用不同的参数,进行操作,掌握其功能。如 –v, -d , -e, -l, -r等参数的使用。 (4) 将所捕获的数据包内容存储在文件中,文件名命名规则是lab1_学号 (5) 对snort进行配置, 完成一个入侵检测的工作。要求检测到TCP包中的某个特征码, 并给出应的报警信息。 (6) 认真完成每一个实验步骤,并做好记录。 1.4 实验准备 (1) 熟悉linux基本命令 (2) 熟悉linux系统的安装配置 (3) 熟悉虚拟机的安装和操作 (4) 理解入侵检测系统的基本原理和实现技术 (5) 理解Snort的工作原理 1.5 实验步骤 一、 安装snort 1、 更新Ubuntu软件源, 2、 进入终端,提升用户权限sudo su 3、 更新软件列表sudo apt-get update 4、 安装snort (Ubuntu12.04软件列表中的snort默认是2.9,之前版本的软件列表的snort版本是较低版本):sudo apt-get install snort 5、 Snort –v 6、 Snort –vd 7、snort – vde alert ip any any -> any any (msg:\"Got an IP Packet\"; classtype:not-suspicious;sid:2000000; rev:1;) alert icmp any any -> any any (msg:\"Got an ICMP Packet\"; classtype:not-suspicious;sid:2000001; rev:1;) alert icmp any any -> any any (msg:\"ICMP Large ICMP Packet\"; dsize:>800;reference:arachnids,246; classtype:bad-unknown; sid:2000499; rev:4;) 前面两个规则分别在捕获任何IP数据包和ICMP数据包的时候产生一个告警。因为它们在遇到每一个数据包的时候都触发告警,所以在数据流量很大的网络段不 适合使用这些规则!如果必要的话,请在一个小网络段或测试网络段使用这些规则。最后一个规则是对499号签名ID(标准规则)的拷贝进行修改以放宽产生告 警的门限来满足我们的测试目的(注意:Snort.org组织将1-1,000,000的签名ID号留给“正式”规则使用,详情请查看Snort的用户使 用手册)。正常情况下你应该避免放宽告警门限,因为这样会产生很多的误告警。 1.6实验总结: 通过这次的课程设计掌握在linux下的snort工具的安装、配置、使用方法,实现捕捉Telnet、FTP、HTTP等协议的数据包。 利用snort的检测功能,完成对一些攻击的检测.加深对各种攻击软件的了解.结合课堂授课内容,全面了解snort这个著名的开源入侵检测工具的实现方法和原理. 为利用第三方软件分析进一步分析数据打下基础。

二、用Snort构建实用的入侵检测系统

2.1 实验目的 (1) 网络数据获取与分析是网络入侵检测系统的基础。通过实验让同学们掌握网络数据获取及数据还原的方法和实现。 (2) 通过实验让同学们加深对网络数据获取原理的理解。 (3) 通过实验让同学们初步了解在linux下的程序开发过程、开发环境。 (4) 为利用第三方软件分析进一步分析数据打下基础。 2.2 实验内容 (1) 安装除snort以外的其它软件,如Apach、PHP、mysql、acid的安装等相关软件。 (2) 完成相应的配置文件的配置,如配置数据库输出插件、制订入侵防范策略等 (3) 能利用下载的检测规则,检测入侵。 (4) 自已完成一条规则的编写,并进行正确性测试。 (5) 完成对检测规则的压力测试。 2.3 实验要求 (1) 认真完成所规定的实验内容。 (2) 将配置文件的的改动部分存储下来,传送到系ftp服务器上。文件名命名规则是Lab2_学号 (3) 所操作的重要步骤和结果用截屏的方法和文件的方式保存和存储,并送到ftp服务器上 (4) 认真完成每一个实验步骤,并做好记录。 (5) 根据所做的全部实验做一个简单总结。 2.4 实验准备 (1) 熟悉linux基本命令 (2) 熟悉linux系统的安装配置 (3) 熟悉虚拟机的安装和操作 (4) 理解入侵检测系统的基本原理和实现技术 (5) 理解Snort的工作原理 (6) 参考教材参考资料及网上有关资料 2.5 实验步骤 一、LAMP服务器配置 1、 提升权限 用sudo su 提升用户权限。 2、 更新软件包列表。 用apt-get update 获取最新的软件包列表(如果不执行这一部可能在出现未发现软件包的现象) 3、安装MySQL5 apt-get install mysql-server mysql-client 安装过程中会遇到如下图的两个界面。 要求提供一个MySQL root用户的密码-这个密码是为用户有效的根@本地主机以及作为root@server1.example.com的,所以我们不会有手动指定一个MySQL root密码后: MySQL的“root”用户:新密码 - yourrootsqlpassword 重复密码: < - yourrootsqlpassword 3、 安装Apache2 Apt-get install Apache2 修改apache默认目录(不修改也可以用,这里暂时不加阐述) 安装完成重启Apache/etc/init.d/apache2 restart在浏览器中输入本机ip或是localhost 显示如下午即为安装成功。 4、 安装PHP5 apt-get install php5 libapache2-mod-php5 重启Apache /etc/init.d/apache2 restart 5、 测试的PHP5 /获取PHP5安装的详细信息 默认网站的文件根目录是/ var / www下面。现在,我们将在该目录中创建一个小型PHP文件(info.php的)和在浏览器中调用它。该文件将显示很多关于我们的PHP安装,如安装的PHP版本,有用的细节。 vi /var/www/info.php 在浏览器中输入http://本机ip/info.php或localhost/info.php 正如你所看到的,PHP5的工作,它通过Apache 2.0的处理程序,在服务器API 线。如果你继续向下滚动,你会看到所有在PHP5中已经启用的模块。MySQL是没有列出,这意味着我们不必在PHP5支持MySQL 6、 安装需要的Mysql对php支持包 可以用命令查找:apt-cache search php5 7、 获得MySQL支持在PHP5 phpMyAdmin是一个网络接口,通过它可以管理你的MySQL数据库。 安装:apt-get install phpmyadmin 你会看到以下问题点确定 安装完成之后在浏览器中输入localhost查看是否成功。如果出现not found错误,解决方法是进入var/www/目录下给phpmyadmin加一个软连接 命令如下:cd /var/www/ sudo ln –s /usr/share/phpmyadmin 当配置都成功了可以看到phpmyadmin的界面,下图是我建完snort时的截图可能会你们看的的不同。 安装、配置Snort 安装过程中需要进行配置,配置过程如下: sudo su apt-get update apt-get install snort-mysql Snort-mysql软件包安装完成后,在/usr/share/doc/snort-mysql/目录下放置了一些文档,可以使用如下方法查看文档 为snort创建数据库过程 mysql –uroot –p create database sonrtdb grant creat,insert,select,update on snort.* to snort@localhost; set password for snort@localhost=PASSWOED(„snortpassword‟); exit; 测试创建的数据用户:mysql –usnort –psnortpassword 能进入则证明创建成功; 将snort-mysql附带的sql文件导入数据库: cd /uer/share/doc/snort-mysql/ zcat creat_mysql.gz |mysql snortdb –usnort –psnortpassword 将/etc/snort/db-pending-config文件删除: rm /etc/snort/db-pending-config 配置snort 在配置文件的第50行,将其修改为我们要监控的网段 var HOME_NET 10.0.2.55/24 var EXTERNAL_NET !$HOME_NET 在配置文件的第700行,找到“outout database: log, mysql,”一行,如果此行没有被注释掉则注释掉,按照此行格式写一个新的; 该设置使Snort将log和alert信息都写入到指定的MySQL数据库中。 在/var/log/snort/目录下创建alert文件,并更改所有者为snort,否则snort因不能写入这个文件无法启动, cd /var/log/snort / touch alert chown snort alert 设置完成后,测试配置是否正常: snort –c /etc/snort/snort.conf 最后出现这个画面,说明配置成功了,按“Ctrl + C”键即可退出。 用如下命令查看/var/log/syslog日志文件: cat /var/log/syslog |grep snort |grep ERROR 安装、配置acidbase软件包 apt-get install acidbase 此时,数据库选择MySQL数据库,如下所示: 此时输入MySQL数据库的root用户密码,如下所示: 此过程时,直接按回车键即可,让系统自动生成密码,如下所示: 配置Apache acidbase软件包自己带了一个Apache配置文件,位于/etc/acidbase/apache.conf,修改该文件,将其包含到当前的 虚拟主机的配置文件中 Vi /etc/acidbase/apache.conf 重新加载Apache配置,并重启Apache服务: Service apache2 reload Service apache2 restart 配置acidbase 在浏览器中打开:http://ip地址/acidbase/setup/,开始配置,在第一个页面上,点击“Continue”,如下图所示: 在接下来的步骤中,语言选择“simplified_chinese”,并输入路径“/usr/share/php/adodb” 在“Step 2 of 5”界面上,输入MySQL数据库信息 在“Step 3 of 5”界面上,输入用户名和密码,用于登陆BASE 在“Step 4 of 5”界面上,点击“Create BASE AG”按钮,在数据库中创建表 此时,如果你看到了如下所示界面,说明数据库表创建成功,然后点击最下方的 \"step 5\"将生成的配置文件复制下来: 生成的配置文件,并保存为/etc/acidbase/base_conf.php,并在配置文件的460行左右找到$BASEE_path将其注掉,并添加一行 $BASE_path=\"/usr/share/acidbase\" 保存退出文件后,修改文件权限 Chmod c=/etc/acidbase/base_conf.php Chgrp www-date/etc/acidbase/base_conf.php 此时登陆http://localdhost/acidbase/页面,输入用户名、密码,来查看Snort截获的入侵日志: alert ip any any -> any any (msg:\"Got an IP Packet\"; classtype:not-suspicious;sid:2000000; rev:1;) alert icmp any any -> any any (msg:\"Got an ICMP Packet\"; classtype:not-suspicious;sid:2000001; rev:1;) alert icmp any any -> any any (msg:\"ICMP Large ICMP Packet\"; dsize:>800;reference:arachnids,246; classtype:bad-unknown; sid:2000499; rev:4;) 这个是个用ping命令测试snort是否正常工作的规则,当我ping此入侵检测系统时就会得到警告信息\"Got an ICMP Packet\" 2.6实验总结: 在上次的基础上继续这次的实验,因为有了之前的基础所以对snort有了更加清楚的了解,实验进行的比较顺利。因为以前有过LAMP的搭建的经历所以对能很好的完成实验。但是在写入侵检测规则的时候还有有些困难,因为要想写好一个规则要对通信的协议比较清楚,还要了解入侵的手段。因为只有具备上述要求才能写出一条有效的规则。

三、简单的基于嗅探器的入侵检测系统的设计与实现

3.1 实验目的 (1)了解和掌握基于网络入侵检测系统的设计与实现原理 (2)掌握网络数据采集的机制和实现方法 (3)利用模式匹配技术和协议分析技术实现简单的检测引擎 3.2 实验内容 (1)设计并实现一个简单的嗅探器 (2)针对嗅探器所捕获的数据包实现解码/译码和特征检测 3.3 实验要求 (1) 认真完成所规定的实验内容。 (2) 将源代码,传送到系ftp服务器上。要求源代码有注释,可读性较好。文件名命名规则是Lab3_学号 (3) 将程序的执行结果通过截屏等方式记录下来,并做简单分析。 (4) 认真完成每一个实验步骤,并总结、并进行现场演示和说明。 1.4 实验准备 了解基于嗅探器的入侵检测系统的设计原理。 1.5 实验步骤 源码: // xiutan.cpp : 定义控制台应用程序的入口点。 // #include \"stdafx.h\" #include \"stdio.h\" #include \"winsock2.h\" #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) //this removes the need of mstcpip.h void StartSniffing (SOCKET Sock); //This will sniff here and there void ProcessPacket (unsigned char* , int); //This will decide how to digest void PrintIpHeader (unsigned char* , int); void PrintIcmpPacket (unsigned char* , int); void PrintUdpPacket (unsigned char* , int); void PrintTcpPacket (unsigned char* , int); void ConvertToHex (unsigned char* , unsigned int); void PrintData (unsigned char* , int); //IP Header Structure typedef struct ip_hdr { unsigned char ip_header_len:4; // 4-bit header length (in 32-bit words) normally=5 (Means 20 Bytes may be 24 also) unsigned char ip_version :4; // 4-bit IPv4 version unsigned char ip_tos; // IP type of service unsigned short ip_total_length; // Total length unsigned short ip_id; // Unique identifier unsigned char ip_frag_offset :5; // Fragment offset field unsigned char ip_more_fragment :1; unsigned char ip_dont_fragment :1; unsigned char ip_reserved_zero :1; unsigned char ip_frag_offset1; //fragment offset unsigned char ip_ttl; // Time to live unsigned char ip_protocol; // Protocol(TCP,UDP etc) unsigned short ip_checksum; // IP checksum unsigned int ip_srcaddr; // Source address unsigned int ip_destaddr; // Source address } IPV4_HDR; //UDP Header Structure typedef struct udp_hdr { unsigned short source_port; // Source port no. unsigned short dest_port; // Dest. port no. unsigned short udp_length; // Udp packet length unsigned short udp_checksum; // Udp checksum (optional) } UDP_HDR; // TCP Header Structure typedef struct tcp_header { unsigned short source_port; // source port unsigned short dest_port; // destination port unsigned int sequence; // sequence number - 32 bits unsigned int acknowledge; // acknowledgement number - 32 bits unsigned char ns :1; //Nonce Sum Flag Added in RFC 3540. unsigned char reserved_part1:3; //according to rfc unsigned char data_offset:4; /*The number of 32-bit words in the TCP header. This indicates where the data begins. The length of the TCP header is always a multiple of 32 bits.*/ unsigned char fin :1; //Finish Flag unsigned char syn :1; //Synchronise Flag unsigned char rst :1; //Reset Flag unsigned char psh :1; //Push Flag unsigned char ack :1; //Acknowledgement Flag unsigned char urg :1; //Urgent Flag unsigned char ecn :1; //ECN-Echo Flag unsigned char cwr :1; //Congestion Window Reduced Flag //////////////////////////////// unsigned short window; // window unsigned short checksum; // checksum unsigned short urgent_pointer; // urgent pointer } TCP_HDR; //ICMP Header Structure typedef struct icmp_hdr { BYTE type; // ICMP Error type BYTE code; // Type sub code USHORT checksum; USHORT id; USHORT seq; } ICMP_HDR; FILE *logfile; int tcp=0,udp=0,icmp=0,others=0,igmp=0,total=0,i,j; struct sockaddr_in source,dest; char hex[2]; //Its free! IPV4_HDR *iphdr; TCP_HDR *tcpheader; UDP_HDR *udpheader; ICMP_HDR *icmpheader; int main() { SOCKET sniffer; struct in_addr addr; int in; char hostname[100]; struct hostent *local; WSADATA wsa; logfile=fopen(\"log.txt\ if(logfile==NULL) printf(\"Unable to create file.\"); //Initialise Winsock printf(\"\\nInitialising Winsock...\"); if (WSAStartup(MAKEWORD(2,2), &wsa) != 0) { printf(\"WSAStartup() failed.\\n\"); return 1; } printf(\"Initialised\"); //Create a RAW Socket printf(\"\\nCreating RAW Socket...\"); sniffer = socket(AF_INET, SOCK_RAW, IPPROTO_IP); if (sniffer == INVALID_SOCKET) { printf(\"Failed to create raw socket.\\n\"); return 1; } printf(\"Created.\"); //Retrive the local hostname if (gethostname(hostname, sizeof(hostname)) == SOCKET_ERROR) { printf(\"Error : %d\ return 1; } printf(\"\\nHost name : %s \\n\ //Retrive the available IPs of the local host local = gethostbyname(hostname); printf(\"\\nAvailable Network Interfaces : \\n\"); if (local == NULL) { printf(\"Error : %d.\\n\ return 1; } for (i = 0; local->h_addr_list[i] != 0; ++i) { memcpy(&addr, local->h_addr_list[i], sizeof(struct in_addr)); printf(\"Interface Number : %d Address : %s\\n\ } printf(\"Enter the interface number you would like to sniff : \"); scanf(\"%d\ memset(&dest, 0, sizeof(dest)); memcpy(&dest.sin_addr.s_addr,local->h_addr_list[in],sizeof(dest.sin_addr.s_addr)); dest.sin_family = AF_INET; dest.sin_port = 0; printf(\"\\nBinding socket to local system and port 0 ...\"); if (bind(sniffer,(struct sockaddr *)&dest,sizeof(dest)) == SOCKET_ERROR) { printf(\"bind(%s) failed.\\n\ return 1; } printf(\"Binding successful\"); //Enable this socket with the power to sniff : SIO_RCVALL is the key Receive ALL ;) j=1; printf(\"\\nSetting socket to sniff...\"); if (WSAIoctl(sniffer, SIO_RCVALL, &j, sizeof(j), 0, 0, &in,0, 0) == SOCKET_ERROR) { printf(\"WSAIoctl() failed.\\n\"); return 1; } printf(\"Socket set.\"); //Begin printf(\"\\nStarted Sniffing\\n\"); printf(\"Packet Capture Statistics...\\n\"); StartSniffing(sniffer); //Happy Sniffing //End closesocket(sniffer); WSACleanup(); return 0; } void StartSniffing(SOCKET sniffer) { unsigned char *Buffer = (char *)malloc(65536); //Its Big! int mangobyte; if (Buffer == NULL) { printf(\"malloc() failed.\\n\"); return; } do { mangobyte = recvfrom(sniffer,Buffer,65536,0,0,0); //Eat as much as u can if(mangobyte > 0) ProcessPacket(Buffer, mangobyte); else printf( \"recvfrom() failed.\\n\"); } while (mangobyte > 0); free(Buffer); } void ProcessPacket(unsigned char* Buffer, int Size) { iphdr = (IPV4_HDR *)Buffer; ++total; switch (iphdr->ip_protocol) //Check the Protocol and do accordingly... { case 1: //ICMP Protocol ++icmp; PrintIcmpPacket(Buffer,Size); break; case 2: //IGMP Protocol ++igmp; break; case 6: //TCP Protocol ++tcp; PrintTcpPacket(Buffer,Size); break; case 17: //UDP Protocol ++udp; PrintUdpPacket(Buffer,Size); break; default: //Some Other Protocol like ARP etc. ++others; break; } printf(\"TCP : %d UDP : %d ICMP : %d IGMP : %d Others : %d Total : %d\\r\} void PrintIpHeader (unsigned char* Buffer, int Size) { unsigned short iphdrlen; iphdr = (IPV4_HDR *)Buffer; iphdrlen = iphdr->ip_header_len*4; memset(&source, 0, sizeof(source)); source.sin_addr.s_addr = iphdr->ip_srcaddr; memset(&dest, 0, sizeof(dest)); dest.sin_addr.s_addr = iphdr->ip_destaddr; fprintf(logfile,\"\\n\"); fprintf(logfile,\"IP Header\\n\"); fprintf(logfile,\" |-IP Version : %d\\n\ fprintf(logfile,\" |-IP Header Length : %d DWORDS or %d Bytes\\n\int)iphdr->ip_header_len,((unsigned int)(iphdr->ip_header_len))*4); fprintf(logfile,\" |-Type Of Service : %d\\n\ fprintf(logfile,\" |-IP Total Length : %d Bytes(Size of Packet)\\n\ fprintf(logfile,\" |-Identification : %d\\n\ fprintf(logfile,\" |-Reserved ZERO Field : %d\\n\int)iphdr->ip_reserved_zero); fprintf(logfile,\" |-Dont Fragment Field : %d\\n\ fprintf(logfile,\" |-More Fragment Field : %d\\n\int)iphdr->ip_more_fragment); fprintf(logfile,\" |-TTL : %d\\n\ fprintf(logfile,\" |-Protocol : %d\\n\ fprintf(logfile,\" |-Checksum : %d\\n\ fprintf(logfile,\" |-Source IP : %s\\n\ fprintf(logfile,\" |-Destination IP : %s\\n\} void PrintTcpPacket(unsigned char* Buffer, int Size) { unsigned short iphdrlen; iphdr = (IPV4_HDR *)Buffer; iphdrlen = iphdr->ip_header_len*4; tcpheader=(TCP_HDR*)(Buffer+iphdrlen); fprintf(logfile,\"\\n\\n***********************TCP Packet*************************\\n\"); PrintIpHeader(Buffer,Size); fprintf(logfile,\"\\n\"); fprintf(logfile,\"TCP Header\\n\"); fprintf(logfile,\" |-Source Port : %u\\n\ fprintf(logfile,\" |-Destination Port : %u\\n\ fprintf(logfile,\" |-Sequence Number : %u\\n\ fprintf(logfile,\" |-Acknowledge Number : %u\\n\ fprintf(logfile,\" |-Header Length : %d DWORDS or %d BYTES\\n\" ,(unsigned int)tcpheader->data_offset,(unsigned int)tcpheader->data_offset*4); fprintf(logfile,\" |-CWR Flag : %d\\n\ fprintf(logfile,\" |-ECN Flag : %d\\n\ fprintf(logfile,\" |-Urgent Flag : %d\\n\ fprintf(logfile,\" |-Acknowledgement Flag : %d\\n\ fprintf(logfile,\" |-Push Flag : %d\\n\ fprintf(logfile,\" |-Reset Flag : %d\\n\ fprintf(logfile,\" |-Synchronise Flag : %d\\n\ fprintf(logfile,\" |-Finish Flag : %d\\n\ fprintf(logfile,\" |-Window : %d\\n\ fprintf(logfile,\" |-Checksum : %d\\n\ fprintf(logfile,\" |-Urgent Pointer : %d\\n\ fprintf(logfile,\"\\n\"); fprintf(logfile,\" DATA Dump \"); fprintf(logfile,\"\\n\"); fprintf(logfile,\"IP Header\\n\"); PrintData(Buffer,iphdrlen); fprintf(logfile,\"TCP Header\\n\"); PrintData(Buffer+iphdrlen,tcpheader->data_offset*4); fprintf(logfile,\"Data Payload\\n\"); PrintData(Buffer+iphdrlen+tcpheader->data_offset*4 ,(Size-tcpheader->data_offset*4-iphdr->ip_header_len*4)); fprintf(logfile,\"\\n###########################################################\"); } void PrintUdpPacket(unsigned char *Buffer,int Size) { unsigned short iphdrlen; iphdr = (IPV4_HDR *)Buffer; iphdrlen = iphdr->ip_header_len*4; udpheader = (UDP_HDR *)(Buffer + iphdrlen); fprintf(logfile,\"\\n\\n***********************UDP Packet*************************\\n\"); PrintIpHeader(Buffer,Size); fprintf(logfile,\"\\nUDP Header\\n\"); fprintf(logfile,\" |-Source Port : %d\\n\ fprintf(logfile,\" |-Destination Port : %d\\n\ fprintf(logfile,\" |-UDP Length : %d\\n\ fprintf(logfile,\" |-UDP Checksum : %d\\n\ fprintf(logfile,\"\\n\"); fprintf(logfile,\"IP Header\\n\"); PrintData(Buffer,iphdrlen); fprintf(logfile,\"UDP Header\\n\"); PrintData(Buffer+iphdrlen,sizeof(UDP_HDR)); fprintf(logfile,\"Data Payload\\n\"); PrintData(Buffer+iphdrlen+sizeof(UDP_HDR) ,(Size - sizeof(UDP_HDR) - iphdr->ip_header_len*4)); fprintf(logfile,\"\\n###########################################################\"); } void PrintIcmpPacket(unsigned char* Buffer , int Size) { unsigned short iphdrlen; iphdr = (IPV4_HDR *)Buffer; iphdrlen = iphdr->ip_header_len*4; icmpheader=(ICMP_HDR*)(Buffer+iphdrlen); fprintf(logfile,\"\\n\\n***********************ICMP Packet*************************\\n\"); PrintIpHeader(Buffer,Size); fprintf(logfile,\"\\n\"); fprintf(logfile,\"ICMP Header\\n\"); fprintf(logfile,\" |-Type : %d\ if((unsigned int)(icmpheader->type)==11) fprintf(logfile,\" (TTL Expired)\\n\"); else if((unsigned int)(icmpheader->type)==0) fprintf(logfile,\" (ICMP Echo Reply)\\n\"); fprintf(logfile,\" |-Code : %d\\n\ fprintf(logfile,\" |-Checksum : %d\\n\ fprintf(logfile,\" |-ID : %d\\n\ fprintf(logfile,\" |-Sequence : %d\\n\ fprintf(logfile,\"\\n\"); fprintf(logfile,\"IP Header\\n\"); PrintData(Buffer,iphdrlen); fprintf(logfile,\"UDP Header\\n\"); PrintData(Buffer+iphdrlen,sizeof(ICMP_HDR)); fprintf(logfile,\"Data Payload\\n\"); PrintData(Buffer+iphdrlen+sizeof(ICMP_HDR) ,(Size - sizeof(ICMP_HDR) - iphdr->ip_header_len*4)); fprintf(logfile,\"\\n###########################################################\"); } void PrintData (unsigned char* data , int Size) { for(i=0 ; i < Size ; i++) { if( i!=0 && i%16==0) //if one line of hex printing is complete... { fprintf(logfile,\" \"); for(j=i-16 ; j=32 && data[j]<=128) fprintf(logfile,\"%c\ else fprintf(logfile,\".\"); //otherwise print a dot } fprintf(logfile,\"\\n\"); } if(i%16==0) fprintf(logfile,\" \"); fprintf(logfile,\" %02X\ if( i==Size-1) //print the last spaces { for(j=0;j<15-i%16;j++) fprintf(logfile,\" \"); //extra spaces fprintf(logfile,\" \"); for(j=i-i%16 ; j<=i ; j++) { if(data[j]>=32 && data[j]<=128) fprintf(logfile,\"%c\ else fprintf(logfile,\".\"); } fprintf(logfile,\"\\n\"); } } } 1.6实验总结: 通过这次的课设我了解和掌握了基于网络入侵检测系统的设计与实现原理,掌握了网络数据采集的机制和实现方法。并且可以利用模式匹配技术和协议分析技术实现简单的检测引擎,收获很大。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务