《防火墙与入侵检测课程设计报告.docx》由会员分享,可在线阅读,更多相关《防火墙与入侵检测课程设计报告.docx(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 操作系统安全原理与技术争论课题:防火墙与入侵检测指导教师:董理君学生姓名:王敬 学生班级:193062学生学号:202310027811 操作系统安全原理与技术防火墙与入侵检测课程设计报告一、 软硬件运行环境l 硬件推举配置内存:128M 及以上配置其他:无特别要求l 软件运行环境操作系统:windows 2023 及以上版本其他:无特别要求二、 工程争论背景与意义背景意义:所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共 网之间的界面上构造的保护屏障.是一种猎取安全性方法的形象说法,它是一种计算机硬件和 软件的结合,使 Internet 与 Intranet
2、 之间建立起一个安全网关Security Gateway,从而保护内部网免受非法用户的侵入,防火墙主要由效劳访问规章、验证工具、包过滤和应用 网关 4 个局部组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件 (其中硬件防火墙用的较少,例如国防部以及大型机房等地才用,由于它价格昂贵)。该计算机流入流出的全部网络通信均要经过此防火墙。防火墙对流经它的网络通信进展扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能制止特定端口的流出通信,封锁特洛伊木马。最终,它可以制止来自特别站点的访问,从而防止来自不明入侵者的全部通信。三、 关键技术及解
3、决方案概要设计:(1) 网络包的分析各种类型报文对象的构造:由于 pcap 每次抓到一个数据包,会提交其信息,方式为以 unsigned char* 指向2 操作系统安全原理与技术构造以太帧头部的对象以太帧头部中的Type字段?完毕的一段缓冲区,现将缓冲区前 14 个字节读入,按以太帧格式构造以太帧头部的对象。然后依据以太帧头部中的 Type 字段,打算接下来应当构造 IP 还是 ARP 还是 RARP。假设是 IP,那么把缓冲区中第 15 个字节开头直到这块缓冲区最终的所以字节读入,按IP 报文格式构造 IP 的对象,依据 IP 的 Protocol 字段,打算接下来构造 TCP,UDP 还
4、是 ICMP。假设是 TCP, 则将 IP 的数据内容读入,按 TCP 格式构造 TCP 的对象。构造ARP对象构造IP对象构造RARP对象IP对象的Protocol字段?构造TCP对象构造UDP对象构造ICMP对象注:1对于不满一个字节的字段,如一些标志位DF,URG 等等需要用位运算将其取出如:if(*pos & 0x04)DF=true;elseDF=false;其中 pos 为unsigned char*,指向当前字节,而DF 为该字节中右起第 3 位。2对于大于一个字节的字段,需要进展大数端到小数端的转换。由于网络中传输是按大数段高位在低地址处,而本地机器中则相反,按小数端地位在低地
5、址处。如:totallen=(*pos)*256+(*(pos+1);total 为双字节,pos 指针开头时指向低地址,乘 256 是完成大数端到小数端的转换。过滤方法:3 操作系统安全原理与技术Type 为以太帧承载的网络层协议类型ARPRARPNo Return False是否侦听ARP?Type值?IP是否侦听IP?No Return False是否侦听NoRARP?Return FalseYesTCPIP的ICMPProtocol?NoUDPReturn False是否侦听UDP?No Return False是否侦听TCP?是否侦听ICMP?No Return FalseYesYe
6、sYesYesYes地址是否符合条件?YesReturn True;No Return False(2) 网络包的拦截1. 捕获网络的数据包后,先查看是来自哪个程序的。在数据库中查找有没有相应的规章: 假设规章数据库中没有相应的规章,就弹出对话框让用户配置规章,然后添加到数据库中,然后按相应的规章,访问网络。假设规章数据库中有相应的配置,就需要读取配置,比照访问规章权限来确定是阻挡还是放行。2. 将进出的报文记录在数据日志中待以后查询。3. 将进出的报文状况添加到封包监视器中,待治理员查询。四、 测试1、 在程序调试阶段遇到的问题:(1) 如何编译动态链接库的问题(2) 如何分析通过 winp
7、cap 捕获的数据包4 操作系统安全原理与技术以上问题最终通过查看相应的资料解决。2、 问题及难点所在:防火墙的难点与重点就在如何猎取网络中的发送或承受的报文,并分析报文。找出潜在的安全问题,防患于未然。通过对winpcap 程序开发包的学习,把握了如何通过winpcap 提过的动态链接库中的根底函数来捕获进出网络的数据包,并参阅资料,了解了各种网络数据包数据的格式与其的特点,通过字节的比照,解析数据包,提取出各 个字段的内容,并推断如何网络的状况。提示用户设置网络访问的规章,来阻挡或允许 或条件允许。3、 运行结果与分析测试启动程序:访问网络:5 操作系统安全原理与技术配置规章:访问结果:6
8、 操作系统安全原理与技术放行时候:拒绝时:网络包监测窗口:7 操作系统安全原理与技术日志查询:分析网络数据包的源代码如下:8 操作系统安全原理与技术TCP 报文的数据构造与解析方法:class TCPGrampublic:TCPGram;TCPGram(const unsigned char *buf,int buflen); virtual TCPGram;int srcport;/源端口int destport;/目的端口unsigned int seqnum;/挨次号unsigned int acknum;/确认号int headlen;/头部长bool URG;/为 1 表示使用紧急指
9、针bool ACK;/为 1 表示确认号合法bool PSH;/表示带有 PUSH 标志的数据bool RST;/用于主机崩溃或其他缘由后的复位bool SYN;/用于建立连接bool FIN;/用于释放连接int windowsize;/窗口大小int checksum;/校验和int urgpos;/紧急指针,从当前挨次号到紧急数据位置偏移量int optlen;/选项长度unsigned char *options;/选项字段int datalen;/数据段的长度unsigned char *data;/数据指针;TCPGram:TCPGram(const unsigned char *
10、buf,int buflen)/unsigned char *buf; unsigned char *pos;9 操作系统安全原理与技术/int buflen;/buflen=bufferlen;/buf=new unsigned charbuflen;/memcpy(buf,buffer,buflen);pos=(unsigned char *)buf; srcport=(*pos)*0x100+(*(pos+1);pos+=2; destport=(*pos)*0x100+(*(pos+1);pos+=2; seqnum=(*pos)*0x1000000+(*(pos+1)*0x10000
11、+(*(pos+2)*0x100+(*(pos+3);pos+=4; acknum=(*pos)*0x1000000+(*(pos+1)*0x10000+(*(pos+2)*0x100+(*(pos+3);pos+=4; headlen=(*pos)/16;pos+;if(*pos & 0x20) URG=true;elseURG=false; if(*pos & 0x10)ACK=true;else10 操作系统安全原理与技术ACK=false; if(*pos & 0x08)PSH=true; elsePSH=false; if(*pos & 0x04)RST=true; elseRST=
12、false; if(*pos & 0x02)SYN=true; elseSYN=false; if(*pos & 0x01)FIN=true; elseFIN=false;pos+; windowsize=(*pos)*0x100+(*(pos+1);pos+=2; checksum=(*pos)*0x100+(*(pos+1);pos+=2; urgpos=(*pos)*0x100+(*(pos+1);if(headlen5) pos+=2;optlen=headlen*4-20;options=new unsigned charoptlen;11 操作系统安全原理与技术memcpy(opt
13、ions,buf+20,optlen);elseoptlen=0; options=NULL;pos=(unsigned char *)(buf+headlen*4); datalen=buflen-headlen*4; if(datalen0)data=new unsigned chardatalen; memcpy(data,buf+headlen*4,datalen);elsedata=NULL; data=0;UDP 的数据构造与解析方法:class UDPGrampublic:UDPGram;UDPGram(const unsigned char *buf,const int buf
14、len); virtual UDPGram;unsigned int srcport;/源端口unsigned int destport;/目的端口int totallen;/总长int checksum;/校验和12 操作系统安全原理与技术unsigned int datalen;/数据段段的长度char *data;UDPGram:UDPGram(const unsigned char *buf,const int buflen)unsigned char *pos; pos=(unsigned char *)buf; srcport=(*pos)*0x100+(*(pos+1); pos
15、+=2;destport=(*pos)*0x100+(*(pos+1); pos+=2; totallen=(*pos)*0x100+(*(pos+1); pos+=2; checksum=(*pos)*0x100+(*(pos+1); datalen=buflen-8;if(datalen0)data=new chardatalen; memcpy(data,buf+8,datalen);elsedata=NULL;IP 的数据构造与解析方法:class IPGrampublic:int version; /版本int IHL; /头部长度int servicetype; /效劳类型 typ
16、e of service int precedence; /优先级13 操作系统安全原理与技术bool delay; /延迟bool throughtput; bool reliability;/吞吐量/牢靠性unsigned int totallen; /总长 total lengthint identification; /标识bool DF; /不要分段bool MF; /还有进一步的分段int fragoffset; /分段偏移 fragment offset int TTL; /生命期 time to liveint protocol; /协议,如 TCP,UDP unsigned
17、int checksum; /头部校验和long srcaddr; /源 IP 地址long destaddr;/目的 IP 地址int optlen; /选项长度unsigned char *options; /选项内容int datalen; /数据长度unsigned char *data;/数据内容IPGram;IPGram(const unsigned char* buf,int buflen); virtual IPGram;CString GetService;void GetDestAddr(char *str); CString GetDestAddr;void GetSrc
18、Addr(char *str); CString GetSrcAddr; CString GetID;IPGram:IPGram(const unsigned char *buf,int buflen)/unsigned char *buf;14 操作系统安全原理与技术unsigned char *pos;/int buflen;/buf=new unsigned charbuffer_len;/buflen=buffer_len;/memcpy(buf,buffer,buflen);pos=(unsigned char *)buf; version=*pos/16; IHL=*pos%16;
19、pos+; servicetype=*pos;precedence=(*pos & 16)*4+(*pos & 8)*2+(*pos & 4); if(*pos & 16)delay=true; elsedelay=false; if(*pos & 8)throughtput=true; elsethroughtput=false; if(*pos & 4)reliability=true; elsereliability=false;pos+; totallen=(*pos)*256+(*(pos+1);pos+=2;15 操作系统安全原理与技术identification=(*pos)*2
20、56+(*(pos+1);pos+=2; if(*pos & 64)DF=true; elseDF=false; if(*pos & 32)MF=true; elseMF=false; fragoffset=(*pos%32)*256+(*(pos+1);pos+=2; TTL=*pos;pos+; protocol=*pos;pos+; checksum=(*pos)*256+(*(pos+1);pos+=2; srcaddr=(*pos)*0x1000000+(*(pos+1)*0x10000+(*(pos+2)*0x100+(*(pos+3);pos+=4; destaddr=(*pos
21、)*0x1000000+(*(pos+1)*0x10000+(*(pos+2)*0x100+(*(pos+3);16 操作系统安全原理与技术if(IHL5)pos+=4; optlen=(IHL-5)*4;options=new unsigned charoptlen; memcpy(options,buf+20,optlen);elseoptlen=0; options=NULL;pos=(unsigned char *)(buf+IHL*4); datalen=totallen-IHL*4; if(datalen0)data=new unsigned chardatalen; memcpy(data,buf+IHL*4,datalen);elsedata=NULL;(留意:其他更多数据包见源程序五、 总结收获与体会通过本次课程设计,我学习到了更多的编程方法,对操作系统安全原理与技术这门课程有了一个比较完整的生疏和理解,知道了如何将防火墙与入侵检测的学问应用到实际编程中。 并且对使用 visual c+ 6.0 开发 windows 程序有了更深的生疏。通过这次设计,增加了我的检索自己所需学问的力量和调试C+程序的力量,也让我体会了编程学问的渊博,我们永 远都不行能把学问学完,只要努力,总能做的比以前更好。17
限制150内