ImageVerifierCode 换一换
格式:DOC , 页数:20 ,大小:499KB ,
资源ID:3583837      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3583837.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(计算机网络课程设计报告-IP数据包的捕获与分析.doc)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

计算机网络课程设计报告-IP数据包的捕获与分析.doc

1、 CENTRAL SOUTH UNIVERSITY 计算机网络课程设计报告 题 目 IP数据包的捕获与分析 学生姓名 廖 成 班级学号 0902130408 指导教师 穆 帅 设计时间 2015年11月 目录 第一章 绪论........................

2、3 1.1 课题研究背景....................................................3 1.2 课题研究的意义..................................................3 第二章 课程设计的目的与要求.........................................3 2.1 课程设计的目的..................................................3 2.2 课程设计的要求..

3、4 第三章 课程设计的内容...............................................4 3.1 课程设计的内容..................................................5 3.2 内容的要求......................................................5 第四章 程序设计与分析...............................................

4、5 4.1 IP数据包........................................................5 4.1.1 数据包的格式说明..........................................5 4.1.2 头部数据结构的定义........................................7 4.2 部分程序实现....................................................7 4.2.1 套接字的使用...................................

5、7 4.2.2 数据库的使用..............................................8 4.2.3 各部分详细实现............................................9 4.4 程序流程图.....................................................12 4.4.1 主程序流程图.............................................12 4.4.2 捕获并分析数据包头部模块流程图..............

6、13 4.4.3 头部信息存数据库模块.....................................13 第五章 实验结果....................................................14 5.1 程序截图.......................................................14 第六章 总结........................................................16 6.1 实验心得.....................

7、16 第七章 附录........................................................17 参考文献...........................................................17 第一章 绪论 1.1 课题研究背景 随着计算机技术的发展,网络的应用迅速普及,网络已日益成为生活中不可或缺的工具。同 时,网络的安全性与可靠性日益受到人们的重视,安全性指的是网络上的信息不被泄露、更改和破坏,可靠性指的是网络系统能

8、够连续、可靠地运行,网络服务不被 中断。网络数据包捕获、监听与分析技术是网络安全维护的一个基础技术同时也是网络入侵的核心手段。所以研究有关数据包捕获和分析技术对保证网络的健康、安 全运行是很有意义的。 1.2课题研究的意义 计算机之间进行通信时,交互的所有信息都封装在数据包中。因此,通过采集网络数据并对其进行相应的分析,可以清楚地了解到进行通信的计算机的通信目的。通过分析采集到的数据包可以确定网络是否受到入侵;其次也可以通过采集到的数据包来分析应用程序可能出现的问题及原因;此外,通过网络数据的采集和统计可以清楚地了解整个网络在各个时段内的网络负载情况,从而判断网络使用得是否合理。除

9、了以上谈到的几个方面外,网络数据包的采集和分析还有其它很多用途。 第二章 课程设计的目的与要求 2.1 课程设计的目的 计算机网络课程设计的目的,是为了让学生更深入地掌握计算机网络的核心内容,实现理论与实践相结合。让学生用具体的实践成果,体现对理论知识的掌握程度。有利于学生提高计算机网络的实践能力,加深对计算机网络理论知识的理解。 2.2 课程设计的要求 (1)编写程序,实现系统的基本功能,鼓励自行增加新功能; (2)要有用户界面:要求至少采用文本菜单界面;鼓励采用图形菜单界面; (3)写课程设计报告,内容包括: l 封面(参见附录I) l 需求分

10、析:以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?给出功能模块图和流程图。同时明确规定:输入的形式和输出值的范围;输出的形式;程序所能够达到的功能;测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。 l 概要设计:包括程序设计组成框图,程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。 l 详细设计:包括模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等),每个模块的算法设计说明(可以是描述算法的流程图)。其中源程序要按照写程序的规则来编写,结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 l 运行结果:包括典

11、型的界面、输入和输出数据等; l 总结:包括课程设计中遇到的问题,解决问题的过程及体会、收获、对课程设计的认识与思考等。 l 附录:包括主要程序清单,要有适当的注释,使程序容易阅读。 (4)课程设计报告书写规范参见附录II,不按照规范书写的,成绩不能评为“优”或“良”。 (5)无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、规章制度,学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席 时间达四分之一以上者,其成绩按不及格处理。 第三章 课程设计的内容 3.1 课程设计的内容 本次实验的要求在网络环境,使用VC++编写程序实现捕获网络中

12、的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。 3.2 内容的要求 (1)了解IP数据包的组织结构,设计程序使其能够自动捕获流经本地网卡的一定数量的IP数据包并解析数据包头部信息。 (2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。 (3)最好能用数据库等便于数据存储分析的媒介保存捕获IP数据包的头部信息,建议设计用户界面。 第四章 程序设计与分析 4.1 IP数据

13、包 4.1.1 IP数据包的格式说明 IP数据包格式包含了标头固定部分,标头可变部分和数据区三部分。IP数据包标头固定部分为20个字节,其中包含了12个参数域,各参数域隐含着网间协议的传输机制。IP包头部具体的标头格式下图所示: 各参数域的具体含义如下: 1) 版本号:长度4位,表示所使用的IP协议的版本。IPv4版本号字段值为4;IPV6版本号字段号的值为6,目前主要是Ipv4。 2) 标头长:长度4位,定义了一个以4B为一个单位的IP包的首部长度,一般长度为20-40个字节。 3) 服务类型:共8位,高3位组成优先级子域,随后4位组成服务类型子域,最后一位暂未使用。 4)

14、 数据报总长度:总长度为2B(即16位)。定义了以字节为单位的数据报的总长度,即一个数据报总长度为65535。 5) 重装标识:长度16位,用于识别IP数据报的编号,让目的主机判断新来的数据属于哪个分组。 6) 分片标识:共3位,最高位为0;DF为禁止分片标识,DF=0表示可以分片;DF=1表示不能分片。MF为分片标识,MF=0表示接的是最后一个分片;MF=1表示不是最后一个分片。 7) 片偏移值:共13位,说明分片在整个数据报中的相对位置。 8) 生存周期:共8位,用来设置数据数据报在整个网络传输过程中的寿命。常以一个数据报可以经过的最多的路由器跳步数来控制。 9) 协议类型:共8

15、位,表示该IP数据报的高层协议类型。 10) 标头校验和:共16位,用于存放检查报头错误的校验码。 11) 源、宿主机地址:各32位,分别表示发送和接受数据报的源主机和宿主机的IP地址。 12) 选项数据域:0-20B,用于控制和测试。 4.1.2 头部数据结构的定义 IP数据包由IP头部与IP数据构成,需要自行构造的是IP数据包的头部。在解析IP头部的各个字段之前,首先需要构造IP头部的数据结构,包括1字节的版本与头部长度、1字节的服务类型、2字节的总长度、2字节的标识符、2字节的标志位与片偏移、1字节的生存周期、1字节的协议、2字节的头部校验、4字节的源地址与4字节的

16、目的地址。这里,不需要构造选项与填充字段。 struct IP_HEAD { union { unsigned char Version;//版本(字节前4位) unsigned char HeadLen;//首部长度(字节后4位) }; unsigned char ServiceType;//服务类型 unsigned short TotalLen;//总长度(16位) unsigned short Identifier;//标识符 union { unsigned short Flags;//标志位(字前位)

17、unsigned short FragOffset;//片偏移(后位) }; unsigned char TimeToLive;//生存时间 unsigned char Protocol;//协议 unsigned short HeadChecksum;//头部校验和 unsigned int SourceAddr;//源IP地址 unsigned int DestinAddr;//目的IP地址 }; 4.2 程序实现 4.2.1 套接字的使用 本程序使用套接字socket编程,将网卡设为能够接受流经网卡的所有类型的数据包。首先,初始化套接字,然

18、后监听数据包,解析数据包。 sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用来创建套接字,其参数为通信发生的区字段和套接字的类型。 bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr))用来把原始socket绑定到本地网卡。 WSAIoctl(sock,_WSAIOW(IOC_VENDOR,1),&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)函数用来把网卡

19、设置为混杂模式。 4.2.2 数据库的使用 本程序需要将捕获的数据包头部信息存入数据库以便以后统计和分析,在使用数据库执行相关数据库的操作之前必须先连接到数据库。具体实现如下: MYSQL* mysql=mysql_init(NULL);初始化一个并返回一个新的MySQL对象。 mysql_real_connect(mysql,con.host,con.user,con.password,con.db,3306,NULL,0);根据传入的参数信息连接到数据库。 数据库连接成功后就可以使用mysql_query(conn,sql_query)函数执行数据库的操作了,conn为数

20、据库连接句柄,sql_query中保存数据库操作语句。执行数据库操作之前需生成数据库操作语句,实现如下: string version,len_h,priority,type,len_t,identi,df,mf,s_offset, life_t,protocol,checksum,s_ip,d_ip,s1,s2,s3,s;定义string类型变量。 s1="insert into head_infos values('IPv"; s2="')"; s3="','"; 以上语句为字符串常量定义,用于连接生成数据库语句。 在解析数据包头部信息时,返回值各不相同,为了便于使用字符串连

21、接操作生成数据库执行语句,需将头部信息统一转换为字符串类型,自定义函数itos(int n)用于将int类型转换为string类型,具体实现如下: string itos(int n) { stringstream ss; ss<>str; return str; }将int类型转换为string类型 s=s1+version+s3+len_h+"bits"+s3+priority+s3+type+s3+len_t+"bits"+s3+identi+s3+df+s3+mf+s3+s_offset+s3+life_t+s3+protoco

22、l+s3+checksum+s3+s_ip+s3+d_ip+s2;生成数据库要执行的插入语句。 sprintf(sql_query,s.c_str());将生成的数据库插入语句格式化。 mysql_query(conn,sql_query);执行MySQL语句将信息存入数据库。 4.2.3各部分详细实现 要进行IP层数据包的接收和发送,应使用原始套接字。创建原始套接字的代码如下: WSADATA wsadata;建立一个WSADATA结构,wsaData用来存储系统传回的关于WINSOCK的资料。 WSAStartup(MAKEWORD(2,2),&wsadata)

23、调用任何套接字API函数之前都必须成功调用一次WSAStartup()函数。 sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);创建原始套接字。 bool flag=TRUE; setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));设置IP头操作选项。 在soccket()函数中,第一个参数指定通信发生的区字段,AF_INET是针对Internet的,允许在远程主机之间通信。第二个参数是套接字的类型,在AF_INET地址族下,有SOCK_STREAM、SOCK_DGRA

24、M、SOCK_RAW三种套接字类型。在这里,设置为SOCK_RAW,表示声明的是一个原始套接字类型。第三个参数依赖于第二个参数,用于指定套接字所有的特定协议,这里使用IP协议。第四个参数为WSAPROTOCOL_INFO位,该位可以置空。第五个参数保留,永远置0。第六个参数是标志位,WSA_FLAG_OVERLAPPED表明可以使用发送接收超时设置。 创建原始套接字后,IP头就会包含在接收的数据中。然后,可以设置IP头操作选项,调用setsockopt函数。其中flag设置为true,并设定IP_HDRINCL选项,表明用户可以亲自对IP头进行处理。 gethostname(hostNam

25、e,100);获取本地主机名。 pHostIP=gethostbyname(hostName);获取本机IP地址。 sockaddr_in host_addr;sockaddr_in结构的值必须是以网络字节顺序表示的值,不能直接使用本机字节顺序的值。 /*填充sockaddr_in结构的内容*/ host_addr.sin_family=AF_INET;协议族 AF_INET。 host_addr.sin_port=htons(6000);honts()函数可以将主机数据转换为网络字节顺序的数据。 host_addr.sin_addr=*(in_addr *)pHostIP->h_

26、addr_list[0]; bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr));把原始Socket绑定到本地网卡。 填写sockaddr_in的内容时,其地址值应填写为本机IP地址,本机IP地址可以通过gethostbyname()函数获取;端口号可以随便填写,但不能与系统冲突,要求大于1024;协议族应填为AF_INET。使用htons()函数可以将无符号短整型的主机数据转换为网络字节顺序的数据。最后使用bind()函数将socket绑定到本机网卡上。绑定网卡后,需要用WSAIoctl()函数把网卡设置为混杂模式,使网卡能够接收所有网络数

27、据,其关键代码如下: DWORD dwBufferLen[10]; DWORD dwBufferInLen=1; DWORD dwBytesReturned=0; WSAIoctl(sock,_WSAIOW(IOC_VENDOR,1),&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL); 如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收到的数据就拷贝到套接字中。因此,网卡就可以接收所有经过本机网卡的IP数据包。 recv()

28、函数用来接收经过的IP包,其参数分别是套接字描述符,缓冲区的地址,缓冲区的大小。在程序中可使用recv()函数接收经过的IP包。该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如果对所发送的数据没特殊要求,直接设置为0。因为IP数据包的最大长度是65535字节,因此,缓冲区的大小不能小于65535字节。设置缓冲区后,可利用循环来反复监听接收IP包,用recv()函数实现接收功能的代码如下: char buffer[65535];设置缓冲区大小 while(num

29、) { if(recv(sock,buffer,65535,0)>0)接收数据包 IP_HEAD ip=*(IP_HEAD *)buffer;逐步解析IP头部的各个字段 } 通过生成P_HEAD结构,使用移位运算和与运算操作解析IP头各个字段的代码具体实现如下: ip.Version>>4;/*获取版本字段*/ ip.HdrLen & 0x0f;/*获取头部长度字段*/ ip.ServiceType>>5;/*获取服务类型字段中的优先级子域*/ (ip.ServiceType>>1)&0x0f;/*获取服务类型字段中的TOS子域*/ ip.TotalLen;/*获取总长

30、度字段*/ ip.ID;/*获取标识字段*/ DF = (ip.Flags>>14) & 0x01;/*解析标志字段*/ MF = (ip.Flags>>13) & 0x01; ip.FragOff & 0x1fff;/*获取分段偏移字段*/ ip.TimeToLive;/*获取生存时间字段*/ ip.Protocol;/*获取协议字段*/ ip.HdrChksum;/*获取头校验和字段*/ inet_ntoa(*(in_addr*)&ip.SrcAddr);/*解析源IP地址字段*/ inet_ntoa(*(in_addr*)&ip.DstAddr);/*解析目的IP地址字

31、段*/ 4.4 程序流程图 4.4.1主程序流程图: 开始 初始化数据库连接信息并连接到数据库 调用Start() 启动winsock并创建原始Socket 调用 Fill_bind() 填充sockaddr_in并绑定socket到本地网卡 调用Set_() 将网卡设置为混杂模式,截获流经网卡的所有IP数据报 根据输入,循环捕获并分析相应数量的数据包,将头部信息存入数据库同时显示在到屏幕 结束 断开数据库连接,关闭套接字 4.4.2 捕获并分析数据包头

32、部模块流程图: Int num=0 要求捕获并分析的ip数据包数量packsum 开始 N num

33、用sprintf()函数将MySQL语句格式化,mysql_query()函数执行MySQL插入语句 结束 第五章 实验结果 5.1 程序截图 (1)输入要捕获IP数据包个数 (2)正在捕获数据包 (3)捕获到需要捕获个数的数据包 (4)登陆到数据库,查看保存的头部信息 (5)保存在数据库中的信息 第六章 总结 6.1 实验收获 通过本次课程设计,我将之前计算机网络课程学过的相关知识系统地学习了一遍,对IP数据包的格式以及如何对IP数据包进行相关的操作都有了比较深刻的掌握

34、了解和学习到很多以前没有关注的知识,弥补了自己某些方面知识的缺陷。由于之前在课堂上学的知识比较有限,知识面不够广,只是初步地了解了计算机网络的相关概念,将理论应用于实践的机会不多,没有系统的掌握有关知识。本次课程设计开始时遇到了很多困难,通过查阅相关资料以及认真学习相关知识,逐渐掌握了捕获与分析IP数据包的原理,之前面临的问题也迎刃而解了。在本次课设中我学会了如何在C++程序中嵌入MySQL数据库的操作,如今,程序设计正由面向用户转向面向数据,用后台数据库保存程序中的数据对程序的安全性、健壮性都有很大的提升,我相信这对我在以后的程序设计中会有很大的帮助。并且在这次程序中总结的很多失败与成功的

35、经验对我以后程序开发的能力会有很大的提升。 第七章 附录 程序源代码(详见附件) 参考文献 [1]计算机网络(第5版)/(美)特南鲍姆(Tanenbaum,A.S.),(美)韦瑟罗尔(Wetherall,D.J.)著;严伟,潘爱民译.--北京:清华大学出版社,2012.3 [2] W.Richard Stevens.TCP/IP详解.卷1:协议.机械工业出版社, 2000.4. [3]计算机网络(第2版)/21世纪大学本科计算机专业系列教材 吴功宜 编著;-- 北京: 清华大学出版社 [4]计算机网络:原理、应用和实现/高等学校教材计算机科学与技术王卫亚等主 编,李晓莉等编著;清华大学出版社 Welcome To Download !!! 欢迎您的下载,资料仅供参考!

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服