解析IP数据包课程设计
ip地址分析协议课程设计

ip地址分析协议课程设计一、课程目标知识目标:1. 学生能够理解IP地址的基本概念,掌握IP地址的分类及特点。
2. 学生能够掌握IPv4和IPv6地址的表示方法,了解它们的区别和联系。
3. 学生能够了解各种网络协议,如TCP、UDP、ICMP等,并理解它们在IP 地址分析中的作用。
技能目标:1. 学生能够运用所学知识,熟练进行IP地址的划分、子网划分和路由配置。
2. 学生能够使用网络抓包工具,分析实际网络数据包中的IP地址和协议信息。
3. 学生能够通过实际操作,掌握基本的网络故障排查方法,解决与IP地址相关的问题。
情感态度价值观目标:1. 学生在学习过程中,培养对网络技术的兴趣和热情,提高信息素养。
2. 学生通过团队合作,培养沟通与协作能力,增强解决问题的信心和责任感。
3. 学生能够认识到网络安全的重要性,养成保护个人隐私和数据安全的意识。
课程性质:本课程为计算机网络基础课程,以理论教学和实践操作相结合的方式进行。
学生特点:学生为初中年级,对计算机网络知识有一定的基础,好奇心强,喜欢动手操作。
教学要求:结合学生特点,注重理论与实践相结合,采用案例教学,引导学生主动参与,提高学生的实际操作能力。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
通过本课程的学习,使学生能够掌握IP地址分析协议的基本知识,具备一定的网络故障排查能力。
二、教学内容1. IP地址基本概念:IP地址的定义、分类(A、B、C类地址)、特殊地址(如私有地址、保留地址)。
2. IP地址表示方法:IPv4地址的表示、子网划分方法;IPv6地址的表示、格式及其优势。
3. 网络协议:TCP、UDP、ICMP等协议的基本原理、功能和特点。
4. 子网划分与路由配置:子网划分的方法、VLSM技术;路由的基本概念、路由表的配置。
5. 网络故障排查:分析IP地址冲突、子网配置错误、路由问题等常见网络故障。
6. 实践操作:使用网络抓包工具(如Wireshark)捕获和分析实际网络数据包;搭建小型网络实验环境,进行IP地址分配和路由配置。
计算机网络课程设计_IP数据包解析实验报告

计算机网络工程课程设计报告题目:解析IP数据包学生姓名:李明学号: 201017010218专业班级:计科10102班同组姓名: 张禄、陈子英、李迅指导教师:李若兰设计时间: 2013年下学期第16周目录目录 (2)1、课程设计目的 (3)2、课程设计要求 (3)3、相关知识 (3)4、课程设计分析 (7)4.1 网卡设置 (7)4.2 使用套接字 (7)4.2.2 接收数据包 (8)4.3 定义IP头部的数据结构 (8)4.4 IP包的解析 (10)4.5 协议的定义 (10)4.6捕获处理 (10)5、运行结果 (11)6、总结 (11)7、课程设计参考资料 (12)8、源程序代码 (12)1、课程设计目的本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
2、课程设计要求本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile 则代表记录结果的日志文件。
2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3)当程序接收到键盘输入Ctrl+C时退出。
3、相关知识互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解,图1给出了IP协议的数据包格式.IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析.报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B之间,是可变的.0 4 8 16 19 24 31图1 IP数据包的格式服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.B7 b6 b5 b4 b3 b2 b1 b0图2 服务类型字段结构优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义.表一优先子域的说明在4位服务类型子域中b4,b3,b2,b1分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本).表2列出了服务器类型自域的构成.总长度字段为2B,它定义了以字节为单位的数据包的总长度.IP数据包的最大长度为65535B.标识字段的长度为16位,用于识别IP数据包的编号.每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组.报头中的标志字段如图7-3所示.标志字段共3位,最高位是0.禁止分片标志DF(do not fragment)字段的值若为1,表示不能对数据包分片;若DF值为0,则表明可以分片.分片标志MF( more fragment)的值为1,表示接收到的不是最后一个分片;若MF值为0,表示接收到的是最后一个分片.片偏移字段共13位,说明分片在整个数据包中的相对位置.片偏移值是以8B 为单位来记数的,因此选择的分片长度应该是8B的整数倍.生存时间(TTL)字段为8位,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的.协议字段为8位,表示使用此IP数据包的高层协议类型,常用的协议号如表3所示.表3 典型的协议号头校验和字段为16位,用于存放检查报头错误的校验码。
计算机网络课程设计IP数据包解析(共5篇)

计算机网络课程设计IP数据包解析(共5篇)第一篇:计算机网络课程设计 IP数据包解析课设名称:IP数据包解析班级:学号:姓名:指导老师:日期: 2012.6.15计算机网络课程设计报告目录1.课程设计目的 (1)2.课程设计要求 (1)3.程序设计分析 (1)3.1 网卡设置 (1)3.2 使用套接字 (2)3.2.2 接收数据包 (2)3.3 定义IP头部的数据结构 (3)3.4 IP包的解析 (3)3.5 协议的定义 (4)3.6捕获处理 (4)4.运行结果 (5)5.总结 (5)6.源程序代码 (6)Ip数据包解析1.课程设计目的本课程设计的目的就是设计一个捕获并解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP 层的工作原理有更好的理解和认识。
2.课程设计要求本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile则代表记录结果的日志文件。
2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3)当程序接收到键盘输入Ctrl+C时退出3.程序设计分析3.1 网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。
但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。
对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地Ip数据包解析址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。
我们要想获取网络设备的所有数据包,就是需要将网卡设置为混杂模式。
数据通信与网络课程设计实践报告- 解析IP数据包

HUBEI NORMAL UNIVERSITY专业课程论文Course’s Thesis课程名称数据通信与网络作业题目数据通信与网络课程设计报告学生姓名贺兵学号2008115020307指导教师彭旭富所在院系计算机科学与技术学院专业名称通信工程完成时间2012-01-10数据通信与网络课程设计报告摘要:互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道。
本程序使用套接字socket编程,将网受流经网卡的所有类型的数据包。
首先,初始化套接字,然后监听数据包,解析数据包。
关键字:TCP/IP协议,数据包,套接字,解析一设计内容及任务利用C/C++/VC/VB/JAVA语言,根据所学知识,设计程序,功能为捕获网络中的IP数据包,接续数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
具体:1.以命令行形式运行,ipparse logfile,其中ipparse是程序命,而logfile则代表记录记过的日志文件。
2.在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3.当程序接收到键盘输入Ctrl+C时推出。
二设计思想IP数据报的格式说明IP协议都具有什么功能。
其首部,版本目前广泛使用的版本号为4;首部长度站4bit;服务类型占8bit,其中服务类型TOS子域占4位,优先级子域占3位,另一位为保留位;总长度字段为2B,IP数据包的最大长度是65535B;标识占16bit,它是一个计数器,用来产生数据报的标识;标志占3bit,其中最低为为MF,MF=1时为后面“还有分片”,MF=0表示这是数据报片中的最后一个,DF=0时,表示允许分片;片偏移以8个字节为偏移单位;生存时间字段记为TTL,单位为秒;协议段占8bit,用于指出次数据是使用何种协议,典型的协议号有6:TCP,17:UDP,1:ICMP。
ip数据报解析程序课程设计

ip数据报解析程序课程设计一、课程目标知识目标:1. 学生理解IP数据报的基本结构,掌握各字段的作用及含义。
2. 学生掌握IP数据报的解析过程,包括头部解析和数据部分处理。
3. 学生了解IP数据报在不同网络环境下的传输过程及路由选择。
技能目标:1. 学生能够运用编程语言实现IP数据报的解析程序,提取关键信息。
2. 学生能够分析实际网络数据包,解读IP数据报内容,提高网络故障排查能力。
3. 学生通过小组合作,提高团队协作能力和问题解决能力。
情感态度价值观目标:1. 学生培养对计算机网络知识的兴趣,激发自主学习欲望。
2. 学生认识到网络通信在现代社会中的重要性,增强信息安全意识。
3. 学生在学习过程中,培养严谨、细致、负责的学习态度,提高自信心。
课程性质:本课程为计算机网络基础知识,旨在让学生通过实践操作,掌握IP 数据报的解析方法。
学生特点:学生具备一定的计算机网络基础,对编程有一定了解,喜欢动手实践。
教学要求:结合学生特点,注重理论与实践相结合,鼓励学生自主探究和小组合作,提高实际操作能力。
在教学过程中,关注学生的个体差异,给予个性化指导,确保学生能够达到预定的学习目标。
通过本课程的学习,使学生能够更好地理解和应用计算机网络知识,为后续学习打下坚实基础。
二、教学内容本课程教学内容主要包括以下三个方面:1. IP数据报基本概念与结构- 介绍IP数据报的定义、作用及其在网络通信中的重要性。
- 详细讲解IP数据报的头部结构,包括版本、头长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、头部校验和、源IP地址和目的IP地址等字段。
2. IP数据报解析过程及编程实现- 分析IP数据报的解析流程,包括捕获数据包、解析头部字段和提取数据部分。
- 结合教材章节,教授使用Python等编程语言实现IP数据报解析程序,并提供示例代码进行讲解。
3. 实践操作与案例分析- 布置实践任务,要求学生分组完成IP数据报解析程序的设计与实现。
高三计算机课件 网络课程设计-IP数据包解析实验报告

目录目录 (1)1、课程设计目的 (2)2、课程设计要求 (2)3、相关知识 (2)4、课程设计分析 (6)4.1 网卡设置 (6)4.2 使用套接字 (6)4.2.2 接收数据包 (7)4.3 定义IP头部的数据结构 (7)4.4 IP包的解析 (9)4.5 协议的定义 (9)4.6捕获处理 (9)5、运行结果 (10)6、总结 (10)7、课程设计参考资料 (11)8、源程序代码 (11)1、课程设计目的本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
2、课程设计要求本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile 则代表记录结果的日志文件。
2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3)当程序接收到键盘输入Ctrl+C时退出。
3、相关知识互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解,图1给出了IP协议的数据包格式.IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析.报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B之间,是可变的.0 4 8 16 19 24 31图1 IP数据包的格式服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.B7 b6 b5 b4 b3 b2 b1 b0图2 服务类型字段结构优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义.表一优先子域的说明在4位服务类型子域中b4,b3,b2,b1分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本).表2列出了服务器类型自域的构成.总长度字段为2B,它定义了以字节为单位的数据包的总长度.IP数据包的最大长度为65535B.标识字段的长度为16位,用于识别IP数据包的编号.每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组.报头中的标志字段如图7-3所示.标志字段共3位,最高位是0.禁止分片标志DF(do not fragment)字段的值若为1,表示不能对数据包分片;若DF值为0,则表明可以分片.分片标志MF( more fragment)的值为1,表示接收到的不是最后一个分片;若MF值为0,表示接收到的是最后一个分片.片偏移字段共13位,说明分片在整个数据包中的相对位置.片偏移值是以8B 为单位来记数的,因此选择的分片长度应该是8B的整数倍.生存时间(TTL)字段为8位,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的.协议字段为8位,表示使用此IP数据包的高层协议类型,常用的协议号如表3所示.表3 典型的协议号头校验和字段为16位,用于存放检查报头错误的校验码。
计算机网络课程设计解析ip数据包

计算机网络课程设计解析ip数据包一、教学目标本节课的教学目标是让学生了解和掌握IP数据包的组成和工作原理,培养学生分析问题和解决问题的能力。
具体分为以下三个部分:1.知识目标:使学生能够描述IP数据包的结构,理解IP地址的概念及其分类,掌握IP数据包的传输过程。
2.技能目标:培养学生运用网络协议分析工具分析IP数据包的能力,能够通过实际案例分析网络故障。
3.情感态度价值观目标:培养学生对计算机网络技术的兴趣,增强其对网络安全的意识,使其认识到计算机网络技术在现代社会中的重要作用。
二、教学内容本节课的教学内容主要包括以下几个部分:1.IP数据包的结构:介绍IP数据包的基本组成,包括头部和数据部分,以及各字段的含义。
2.IP地址:讲解IP地址的概念、分类及其表示方法,让学生了解不同类型的IP地址的使用场景。
3.IP数据包的传输:讲解IP数据包在网络中的传输过程,包括路由选择、分片与重组等。
4.案例分析:分析实际网络故障案例,让学生学会运用IP数据包分析工具进行问题排查。
三、教学方法为了提高学生的学习兴趣和主动性,本节课将采用多种教学方法:1.讲授法:讲解IP数据包的结构、IP地址的分类等基本概念。
2.案例分析法:分析实际网络故障案例,让学生学会运用IP数据包分析工具进行问题排查。
3.实验法:安排课堂实验,让学生亲自动手配置IP地址,分析IP数据包,增强实践操作能力。
4.讨论法:学生分组讨论,分享学习心得,培养团队合作精神。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用权威、实用的计算机网络教材,为学生提供系统的理论知识。
2.参考书:提供相关网络技术参考书籍,方便学生课后拓展学习。
3.多媒体资料:制作精美的PPT课件,直观展示IP数据包的结构和传输过程。
4.实验设备:准备网络实验设备,让学生能够亲自动手实践,提高实际操作能力。
五、教学评估为了全面、客观地评估学生的学习成果,本节课的教学评估将采用多种方式:1.平时表现:关注学生在课堂上的参与程度、提问回答等情况,给予及时的反馈和鼓励。
解析IP数据包实验报告

成都工业学院(课程设计实验报告)院系: 计算机工程系课程名称: 计算机网络设计名称: 解析IP数据包专业名称: 网络工程班级: 1305022姓名: 牟黎明学号: 11指导老师: 刘枝盛老师成绩:设计时间:2014年12月22日—2014年12月26日成都工业学院课程设计任务书指导教师(签名):目录一、课程设计的目的和意义 (3)二、课程设计的内容和要求 (3)三、解析IP数据包设计的相关技术 (4)● 3.1 IP数据包的格式与分析 (4)● 3.2程序分析设计 (6)● 3.2.1 网卡设置 (6)● 3.2.2 程序设计 (6)● 3.2.3 程序设计 (7)● 3.2.4 程序设计 (7)● 3.2.5 程序设计 (7)四、课程设计过程 (8)● 4.1 程序流程图 (8)● 4.2源程序代码 (9)● 4.3 程序运行结果 (16)● 4.3.1.登陆界面,提示输入命令符 (16)● 4.3.2.命令符输入错误后提示界面 (16)● 4.3.3.截获的IP数据包界面 (17)● 4.3.4.继续抓包图 (17)五、课程设计小结 (18)参考文献 (18)一、课程设计的目的和意义目的:本章课程设计的目的就是设计一个解析IP数据包的程序(我的编辑环境为visual2102),并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对网络层的工作原理有更好的理解和认识。
意义:1、有利于编程能力的提高在做设计的过程中,我再一次熟悉了开发设计的基本流程,从分析任务到确立整体框架再到确定算法,然后再一步步实现各函数的功能。
从中,我熟悉了许多新的库函数,并提高了编程技巧。
2、有利于基础知识的理解在这次课程设计之前,我们已经学完了网络层的理论知识,可是对它的理解很粗浅。
之前只知道关于网络层的一些概念性的东西。
可是做完设计后,我才从整体上理解了网络层的框架,明白了网络层的每一个组成部分都是有它特定的功能和意义的,从而对网络层协议有了更深入的理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书目录1.实验目的2.实验要求3.预备知识4.课程设计分析5.实现过程6.程序流程图7.相关扩展8.实习体会9.参考文献一.实验目的:设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而IP层的工作原理有更好的理解和认识.二.实验要求:本设计的目标是捕获网络中数据包,解析数据包的内容,将、结果显示在标准输出上,并同时写入日志文件.程序的具体要求如下:3)以命令行形式运行:ipparse logfile,其中ipparse是程序名,而logfile则代表记录结果的日志文件.4)在标准输出和日志文件中写入捕获的IP数据包的版本,头长度,服务类型,数据包总长度,数据包标识,分段标志,分段偏移值,生存时间,上层协议类型,头校验和,源IP地址和目的IP地址等内容.当程序接收到键盘输入Ctrl+C时退出.三.预备知识互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解,图1给出了IP协议的数据包格式.IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析.报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B之间,是可变的.0 4 8 16 19 24图1 IP数据包的格式服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.B7 b6 b5 b4 b3 b2 b1 b0优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义.表2列出了服务器类型自域的构成.总长度字段为2B,它定义了以字节为单位的数据包的总长度.IP数据包的最大长度为65535B.标识字段的长度为16位,用于识别IP数据包的编号.每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组.报头中的标志字段如图7-3所示.标志字段共3位,最高位是0.禁止分片标志DF(do not fragment)字段的值若为1,表示不能对数据包分片;若DF值为0,则表明可以分片.分片标志MF( more fragment)的值为1,表示接收到的不是最后一个分片;若MF值为0,表示接收到的是最后一个分片.片偏移字段共13位,说明分片在整个数据包中的相对位置.片偏移值是以8B为单位来记数的,因此选择的分片长度应该是8B的整数倍.生存时间(TTL)字段为8位,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的.表7-3 典型的协议号头校验和字段为16位,用于存放检查报头错误的校验码。
检验的范围是整个IP包的报头。
校验和按如下方法计算:1)将头校验和的字段置为0。
2)将报头部分的所有数据以16位为单位进行累加,累加方式是求异或。
3)将累加的结果取反码,就是头校验和。
当收到一个IP包时,要检查报头是否出错,就把报头中的所有数据以16位为单位进行累加,若累加的结果为0,则报文没有出错。
地址字段包括源地址和目的地址。
源地址和目的地址的长度都是32位,分别表示发送数据包的源主机和目的主机的IP地址。
选项字段的长度范围为0~40B,主要用于控制和测试。
在使用选项字段的过程中,有可能出现报头部分的长度不是32位的整数倍的情况。
如果出现这种情况,就需要通过填充位来凑齐。
四.课程设计分析为了获取网络中的IP数据包,必须对网卡进行编程,在这里我们使用套接字(socket)进行编程。
但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式出发的数据包。
对于其他形式的数据包,如已到达网络接口但却不是发送到此地址的数据包,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。
我们要想获取流经网络设备的所有数据包,就需要将网卡设置为混杂模式。
本程序主要由三部分构成:初始化原始套接字,反复监听捕获数据包和解析数据包。
下面就结合核心代码对程序的具体实现进行讲解,同时使程序流程更加清晰,去掉了错误检查等保护性代码。
1.使用原始套接字套接字分为三种,即流套接字(Stream Socket)、数据报套接字(Datagram Socket)和原始套接字(Raw Socket)。
要进行IP数据包的接受与发送,应使用原始套接字。
创建原始套接字的代码如下:SOCKET sock;Sock=WSASoccet(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_O VERRLAPPED);在WSASoccet函数中,第一个参数指定通信发生的区字段,AF_INET是针对Internet 的,允许在远程主机之间通信。
第二个参数是套接字的类型,AF_INET地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三种套接字类型。
在这里,我们设置为SOCK_RAW,表示我们声明的是一个原始套接字类型。
第三个参数依赖于第二个参数,用于指定套接字所用的特定协议,这里使用IP协议。
第四个参数为WSAPROTOCOL_INFO 位,该位可以置空,永远置0。
第六个参数是标志位,WSA_FLAG_OVERRLAPPED表明可以使用发送接收超时设置,本课程设计也可以把这个标志位设置为NULL,因为本设计不用考虑超时情况。
创建原始套接字后,IP头就会包含在接收的数据中。
然后,我们可以设置IP头操作选项,调用sotscockpot函数。
其中flag设置为TRUE,并设定IP_HDRINCL选项,表明用户可以亲自对IP头进行处理。
BOOL flag=true;setsockopt (sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));之后,使用如下代码完成对socket的初始化工作/*获取主机名*/char hostname[128];gethostname(hostname, 100);/*获取IP地址*/hostent *pHostIP;pHostIP=gethostbyname(hostname);/* 填充SOCKADDR_IN的结构内容*/sockaddr_in addr_in;addr_in.sin_addr= *(in_addr*)pHostIP->h_addr_list[0];addr_in.sin_family=AF_TNET;addr-in.sin_port=htons(6000);/* 绑定socket */bind(sock, (POSCKADDR)&addr_in,sizeof(addr_in));填写sockaddr_in的内容时,其地址值应填写为本机IP地址可以通过gethostbyname()函数获取;端口号可以随便填写,但不能与系统冲突;协议族应填写为AF_INET。
注意,sockaddr_in 结构的值必须是以网络字节顺序表示的值,而不能直接使用本机字节顺序的值,使用htoms()函数可以将无符号短整型的主机数据转换为网络字节的顺序的数据。
最后使用bind()函数将socket绑定到本地网卡上。
绑定网卡后,需要WSAIoctl()函数把网卡设置为混杂模式,使网卡能够接收所有网络数据,其关键代码如下:#define SIO_RCV ALL_WSAIOW(IOC_VENDOR,1)DWORD dwBufferLen[10];DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(SnifferSocket,IO-RCV ALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBuffer Len,Sizeof(dwBufferLen),&dwByteReturned,NULL,NULL);如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收到的数据就拷贝到套接字中。
因此,网卡就可以接收所有经过的IP包。
2.接收数据包在程序中可使用RECV()函数接收经过的IP包。
该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收到缓冲区的地址;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如果对所发送的数据没特殊要求,直接设为0。
因为IP数据包的最大长度是65536B,因此缓冲区的大小不能小于65535B。
设置缓冲区后,可利用循环来反复监听接收IP包,用recv()函数接收功能的代码如下:#dedine BUFFER_SIZE 65535Char buffer[BUFFER_SIZE]; //设置缓冲区While(true){recv(sock,buffer,BUFFER_SIZE,0); //j接收数据包……..3.定义IP头部的数据结构程序需要定义一个数据结构表示IP头部。
这个数据结构应该和图7-1吻合,其代码如下:typedef struct _IP_HEADER //定义IP头{union{BYTE Version; //版本前4位BYTE HdrLen; //报头标长(后四位),IP头长度};BYTE ServiceType;//服务类型WORD TotalLen; //总长度WORD ID; //标识union{WORD Flags; //标志Word FragOff; //分段偏移};BYTE TimeToLive; //生命期BYTE Protiocol; //协议WORD HdrChksum; //头校验和DWORD SrcAddr; //源地址DWORD DstAddr: //目的地址BYTE Options; //选项}IP_HEADER;这是我们只考虑IP头部结构,不考虑数据部分。
在捕获IP数据包后,可以通过指针把缓冲区的内容强制转化为IP_HEADER数据结构。
IP_HEADER ip = *( IP_HEADER *)buffer;4.IP包的解析解析IP包的字段有两种策略。