优秀课设——IP数据包解析

合集下载

第7章 解析IP数据包

第7章  解析IP数据包

7.3 相关知识-协议字段

协议字段 -8位 表示使用此IP数据包的高层协议类型, 常用的协议号如下表所示:
协议名称 序号 ICMP 17 IGMP 41 IP in IP 46 TCP 89 EGP 协议名称 UDP IPv6 RSVP OSPF
序号 1 2 4 6 8
7.3 相关知识-头校验和字段(1/2)
7.3 相关知识-总长度字段



总长度字段- 2B 总长度=包头+数据 定义以字节为单位的数据包的总长度 IP数据包的最大长度为216=65535B
预备知识-报文的分片和重组控制



由于IP互连的物理网络处理的最大报文长度不 同,所以IP数据包在传输过程中可能被分片。 IP数据包使用“标识”、“标志”、“片偏移” 三个域对分片进行控制。 分片后的报文独立选择路由路径传输,最后在 目的地进行重组。
网络的SOCKET数据传输是一种特殊的 I/O。 SOCKET也是一种文件描述符,socket具 有一个类似于打开文件的函数调用 socket(),该函数返回一个整型的socket 描述符,随后的连接建立,数据传输等 操作都是通过该socket实现的。

预备知识-套接字(2/2)
常用的socket类型有三种: 流式socket(SOCK_STREAM)-面向连接的socket,针对 于面向连接的TCP服务; 数据报式socket(SOCK_DGRAM)-无连接的socket,对 应于无连接的UDP服务。 原始套接字(raw socket)-保存数据包中的完整IP 头,前面两种套接字只能收到用户数据。因此可以通 过原始套接字对IP层数据进行分析
7.3 相关知识-报头标长(IHL)字段

计算机网络课程设计_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数据包解析(共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数据包

解析IP数据包

解析IP数据包IP数据包是在互联网传输中扮演重要角色的一种数据格式。

它包含了源IP地址和目标IP地址,以及其他与网络通信相关的信息。

解析IP数据包是对这些信息进行分析和解读的过程,以便理解数据包的来源、目的和内容。

在解析IP数据包时,我们可以从以下几个方面进行详细的分析:1. 版本号:IP数据包的版本号指示了所使用的IP协议的版本。

常见的版本有IPv4和IPv6。

IPv4是目前广泛使用的版本,而IPv6是为了解决IPv4地址不足的问题而推出的新版本。

2. 头部长度:IP数据包的头部长度指示了IP头部的长度,以字节为单位。

头部长度可以通过该字段的值乘以4来计算得到实际长度。

3. 服务类型:IP数据包的服务类型字段用于指示对数据包的处理优先级和要求。

这个字段可以用于区分不同类型的流量,如语音、视频或者普通数据。

4. 总长度:IP数据包的总长度字段指示了整个IP数据包的长度,包括头部和数据部份。

这个字段的值以字节为单位。

5. 标识、标志和片偏移:IP数据包的标识字段用于惟一标识一个IP数据包。

标志字段用于指示是否还有后续的分片数据包,以及是否允许分片。

片偏移字段用于指示当前数据包在原始数据中的位置。

6. 生存时间:生存时间字段指示了IP数据包在网络中的最大生存时间。

每经过一个路由器,生存时间字段的值就会减少1。

当生存时间字段的值为0时,数据包将被丢弃。

7. 协议:协议字段指示了IP数据包中封装的上层协议类型。

常见的协议有TCP、UDP和ICMP等。

8. 校验和:校验和字段用于检测IP数据包在传输过程中是否发生了错误。

发送端会计算校验和,并将其添加到IP头部中。

接收端在接收到数据包后会重新计算校验和,并将其与接收到的校验和进行比较,以检测数据包是否有损坏。

9. 源IP地址和目标IP地址:源IP地址字段指示了数据包的发送者的IP地址,而目标IP地址字段指示了数据包的接收者的IP地址。

通过解析IP数据包,我们可以获得有关网络通信的重要信息,如数据包的源地址、目标地址、协议类型等。

ip数据报解析程序课程设计

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数据包解析实验报告

高三计算机课件 网络课程设计-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数据包一、教学目标本节课的教学目标是让学生了解和掌握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数据包实验报告

成都工业学院(课程设计实验报告)院系: 计算机工程系课程名称: 计算机网络设计名称: 解析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、有利于基础知识的理解在这次课程设计之前,我们已经学完了网络层的理论知识,可是对它的理解很粗浅。

之前只知道关于网络层的一些概念性的东西。

可是做完设计后,我才从整体上理解了网络层的框架,明白了网络层的每一个组成部分都是有它特定的功能和意义的,从而对网络层协议有了更深入的理解。

计算机网络课程设计(第七章)解析IP数据包(完整程序代码)

计算机网络课程设计(第七章)解析IP数据包(完整程序代码)

计算机网络课程设计——机械工业出版社第7章:解析IP数据包课程设计目的:本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP 数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。

完整程序代码:#include<stdio.h>#include<winsock2.h>#include<ws2tcpip.h>#pragma comment(lib,"ws2_32.lib")typedef struct _IP_HEADER{union{BYTE Version;BYTE HdrLen;};BYTE ServiceType;WORD TotalLen;WORD ID;union{WORD Flags;WORD FragOff;};BYTE TimeToLive;BYTE Protocol;WORD HdrChksum;DWORD SrcAddr;DWORD DstAddr;BYTE Options;} IP_HEADER;#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)#define BUFFER_SIZE 65535void getVersion(BYTE b,BYTE &version){version=b>>4;}void getIHL(BYTE b,BYTE &length){length=(b&0x0f)*4;}char* parseServiceType_getProcedence(BYTE b) {switch(b>>5){case 7:return "Network Control";break;case 6:return "internet work Control";break;case 5:return "CRITIC/ECP";break;case 4:return "Flash Override";break;case 3:return "Flash";break;case 2:return "Immediate";break;case 1:return "Priority";break;case 0:return "Routine";break;default:return "Unknown";}}char* parseServiceType_getTOS(BYTE b) {b=(b>>1)&0x0f;switch(b){case 0:return "Normal Service";break;case 1:return "Minimize monetary cost";break;case 2:return "Maximize reliability";break;case 4:return "Maximize throughput";break;case 8:return "Minimize delay";break;case 15:return "Maximize security";break;default:return "Unknown";}}void getFlags(WORD w,BYTE &DF,BYTE &MF) {DF=(w>>14)&0x01;MF=(w>>13)&0x01;}void getFragOff(WORD w,WORD &fragOff) {fragOff=w&0x1fff;}char* getProtocol(BYTE Protocol){switch (Protocol){case 1:return "ICMP";case 2:return "IGMP";case 4:return "IP in IP";case 6:return "TCP";case 8:return "EGP";case 17:return "UDP";case 41:return "IPv6";case 46:return "RSVP";case 89:return "OSPF";default:return "UNKNOWN";}}void ipparse(FILE* file,char* buffer){IP_HEADER ip=*(IP_HEADER*)buffer;fseek(file,0,SEEK_END);fprintf(file,"----------------------------------\n");BYTE version;getVersion(ip.Version,version);fprintf(file,"Version:%d\n",version);BYTE headerLen;getIHL(ip.HdrLen,headerLen);fprintf(file,"HdrLen:%d(Bytes)\n",headerLen);fprintf(file,"ServiceType: %s,%s\n",parseServiceType_getProcedence(ip.ServiceType),parseServiceType_getTOS(ip.ServiceType));fprintf(file,"TotalLen: %d(Bytes)\n",ip.TotalLen);fprintf(file,"ID: %d\n",ip.ID);BYTE DF,MF;getFlags(ip.Flags,DF,MF);fprintf(file,"Flags:DF=%d,MF=%d\n",DF,MF);WORD fragOff;getFragOff(ip.FragOff,fragOff);fprintf(file,"FragOff: %d\n",fragOff);fprintf(file,"FragOff: %d\n",fragOff);fprintf(file,"TimeToLive: %d(Hops)\n",ip.TimeToLive);fprintf(file,"Protocol: %s\n",getProtocol(ip.Protocol));fprintf(file,"HdrChksum: 0x%0x\n",ip.HdrChksum);fprintf(file,"SrcAddr: %s\n",inet_ntoa(*(in_addr*)&ip.SrcAddr));fprintf(file,"DstAddr: %s\n",inet_ntoa(*(in_addr*)&ip.DstAddr)); }void main(int argc,char*argv[]){if(argc!=2){printf("Please input command: ParseArp output_file");return;}FILE* file;if((file=fopen(argv[1],"wb+"))==NULL){printf("Fail to open file %s",argv[1]);return;}WSADATA wsData;if(WSAStartup(MAKEWORD(2,2),&wsData)!=0){printf("WSAStartup failed!");return;}SOCKET sock;if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCK ET){printf("Creat socket failed");return;}BOOL flag=true;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag)) ==SOCKET_ERROR){printf("Setsockopt failed!");return;}char hostName[128];if(gethostname(hostName,100)==SOCKET_ERROR){printf("Gethostname failed!");return;}hostent* pHostIP;if((pHostIP=gethostbyname(hostName))==NULL){printf("Gethostbyname failed!");return;}sockaddr_in addr_in;addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0];addr_in.sin_family=AF_INET;addr_in.sin_port=htons(6000);if(bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in))==SOCKET_ERRO R){printf("Bind failed!");return;}DWORD dwValue=1;DWORD dwBufferLen[10];DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;if(WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),& dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ ERROR){printf("Ioctlsocket failed!");return;}char buffer[BUFFER_SIZE];printf("Listening on local host...\n");while(true){int size=recv(sock,buffer,BUFFER_SIZE,0);if(size>0){ipparse(stdout,buffer);ipparse(file,buffer);}}fclose(file);return;}结果截图。

IP数据包解析.doc

IP数据包解析.doc

解析IP数据包一、课题内容和要求本课程设计的目的是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构以及IP协议的相关问题。

课题要求捕获网络中的IP数据包,解析数据包的。

从而对IP层的工作原理有更好的理解和认识。

(1)以命令行形式运行:ipparse logfile ,其中ipparse是程序名,而logfile 则代表记录结果的日志文件。

(2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、总长度、标识、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

(3)程序设计的原理请用流程图描述;程序要求模块结构清晰规范,程序关键代码的注释详细;程序操作友好、界面美观。

(4)程序对于错误输入的处理,设计和编程中遇到问题的归纳总结。

二、需求和思路分析要求捕获网络中的IP数据包,并解析,要求先进行IP数据包的捕获,先捕获再分析,这就要求用到套接字。

套接字编程要求先创建原始套接字,创建原始套接字后,IP头就会包含在接收的数据中,然后对IP头进行操作,接着获取主机名和获取IP地址,并SOCKADDR_IN的结构内容进行填充,再绑定socket到本地网卡上,这就完成了IP数据包得捕获。

捕获后,接收数据包,并进行分析,最后得到结果。

要求以命令行形式运行:ipparse logfile ,其中ipparse是程序名,而logfile则代表记录结果的日志文件,要求先用ofstream outfile打开文件再用outfile将运行结果记录到日志文件中。

三、概要设计四、详细设计为了获取网络中的IP数据包,必须对网卡进行编程,在这里我们使用套接字(socket)进行编程。

但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式出发的数据包。

对于其他形式的数据包,如已到达网络接口但却不是发送到此地址的数据包,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。

解析IP数据包

解析IP数据包

网络协议分析课程设计设计题目:解析IP数据包姓名:院(系):计算机与通信工程学院专业班级:网络工程学号:指导教师:成绩:时间:2011年6月13日至2011年6月17日郑州轻工业学院课程设计任务书题目解析IP数据包专业、班级网络工程08-1 学号姓名主要内容:程序在Windows窗口环境下捕获IP数据报,并解析出各个字段信息,显示在窗口中。

基本要求:选定本机IP后,程序捕获经过对应网卡的IP数据报,根据IP数据报的结构,拆分获得各字段的值,显示在窗口上。

同时程序可以将捕获的所有数据信息导出到日志文件。

参考资料:《网络协议分析》寇晓蕤罗军勇蔡延荣机械工业出版社完成期限:2011.6.13-2010.6.17指导教师签名:课程负责人签名:2010年 6月 11 日目录第一章引言 (4)1.1.关于题目 (4)1.1.1.题目要求 (4)1.1.2.选题背景 (4)1.2.关于编译软件 (4)1.3.关于稳定性 (5)第二章程序设计 (5)2.主要功能设计 (5)2.1.程序流程 (5)第三章程序实现 (6)3.类设计声明 (6)3.1.RawSocket类 (7)3.2.EventArgs类 (7)3.3.Header结构 (8)3.4.主要功能的实现 (8)3.4.1.程序界面 (8)3.4.2.获得主机IP (9)3.4.3.显示列表 (10)3.4.4.详细信息 (11)3.4.5.导出日志 (12)第四章程序测试 (14)4.程序测试 (14)总结与体会 (15)附录: (15)第一章引言1.1. 关于题目1.1.1.题目要求(1)捕获网络中的IP数据包,解析数据包的内容,显示结果,并将结果写入日志文件。

(2)显示的内容包括:捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

(3)设置停止标志,当程序接收到停止命令时即停止。

计算机网络课程设计报告及代码之双机通信,ip包解析

计算机网络课程设计报告及代码之双机通信,ip包解析

计算机网络课程设计报告设计名称:①双机通信②IP数据包的解析专业:计算机科学与技术(交通信息工程)班级:201324020311姓名:李俊指导教师:徐丽2015 年12 月26 日课设一:双机通信 (3)摘要: (3)一、引言 (3)1、课程设计目的: (3)2、课程设计要求: (3)二、设计原理 (4)三、程序代码设计流程 (4)1、服务器流程图 (4)2、.客户端流程图: (4)四、结果及分析 (5)运行结果: (5)2、分析: (5)五、源代码 (5)1. MainServer.java (5)2. Server.java (8)3. MainClient.java (9)4. Client.java (12)5.Constant.java (13)课设二:IP包的解析 (14)摘要: (14)一、引言 (14)1、课程设计目的: (14)2、课程设计要求: (14)二、设计原理 (14)三、程序代码设计流程 (15)四、结果及分析 (16)1、运行结果 (16)2、分析 (16)五、源代码 (16)课设一:双机通信摘要:网络技术的发展非常迅速,在企业、机关、学校的信息管理与服务领域得到广泛的应用。

随着网络体系结构和协议标准研究的进展、操作系统的发展以及光纤技术的引入,网络通信技术得到了快速发展。

目前,网络分层结构使用最多的就是TCP/IP架构,作为TCP/IP架构的重要支柱TCP协议在网络的发展中起到了至关重要的作用,TCP协议处于TCP/IP架构的传输层,其在IP层的基础上,向应用层用户进程提供可靠的、全双工的数据流传输。

关键词TCP;传输层;java ;双机即时通信一、引言网络技术的发展非常迅速,在企业、机关、学校的信息管理与服务领域得到广泛的应用。

随着网络体系结构和协议标准研究的进展、操作系统的发展以及光纤技术的引入,网络技术得到了快速发展。

目前网络的使用覆盖全社会的各个角落。

因此,学习TCP传输技术对深入掌握网络知识是非常重要的。

IP数据包解析

IP数据包解析

计算机网络课程设计报告题目:解析IP数据包学生姓名:学号:专业班级:计算机科学与技术同组姓名:指导教师:设计时间:2015年上学期第17周一、课程设计的目的和意义目的:1、通过解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP 协议的相关问题。

2、通过接收和解析IP数据包,了解IP数据包的基本结构与IP协议的基本功能。

3、捕获网络中的数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。

意义:1、为了在本次课程设计过程中,熟悉开发设计的基本流程,从分析任务到确立整体框架再到确定算法,然后再一步步实现各函数的功能。

从中熟悉新的库函数,并提高编程技巧。

2、我们已经学完了网络层的理论知识,可是对它的理解很粗浅。

之前只知道关于网络层的一些概念性的东西。

可是做完设计后,我才从整体上理解了网络层的框架,明白了网络层的每一个组成部分都是有它特定的功能和意义的,从而对网络层协议有了更深入的理解。

3、程序设计能直接有效地训练我们的创新思维,培养分析问题、解决问题的能力。

二、课程设计的内容和要求根据后面介绍的数据包结构,编写程序的具体要求如下:1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile 则代表记录结果的日志文件。

2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

3)当程序接收到键盘输入Ctrl+C时退出三、解析IP数据包设计的相关技术3.1 IP数据包的格式与分析3.2 程序设计分析3.2.1 网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里我们使用套接字(socket)进行编程。

但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。

对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。

(完整word版)解析ip数据包

(完整word版)解析ip数据包

目录一、课程设计的目的 (1)二、课程设计要求 (1)三、需求分析 (1)1.先对网卡进行编程,以便连接IP层的数据包。

(1)2.预先创建一个logfile文件来保存所解析的IP数据包。

(1)3.使用recv函数实现接收数据包的功能。

(1)四、设计分析 (1)4.1 网卡设置 (1)4.2 使用套接字 (2)五、程序测试 (3)六、小结 (5)七、附录 (5)一、课程设计的目的本章课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。

二、课程设计要求本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。

程序的具体要求如下:1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile 则代表记录结果的日志文件。

2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

3)当程序接收到键盘输入Ctrl+C时退出。

三、需求分析1.先对网卡进行编程(使用套接字进行编程),以便连接IP层的数据包。

2.预先创建一个logfile文件来保存所解析的IP数据包。

3.使用recv函数实现接收数据包的功能。

4.编写ipparse函数解析捕获的数据包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

四、设计分析4.1 网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。

但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。

对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,应用程序无法收取与自己无关的数据包。

解析IP数据包课程设计报告

解析IP数据包课程设计报告

成绩评定表课程设计任务书目录1课程设计目的 (1)2课程设计要求 (2)3相关知识 (3)4课程设计分析 (6)5程序代码 (11)6运行结果与分析 (18)7参考文献 (18)1课程设计目的IP 数据包是网络成传输的基本数据单元,熟悉IP 数据包结构对于理解网络工作原理具有重要意义。

本课程设计的主要目的是通过接受与解析IP 数据包,了解IP 数据包的基本结构与IP 协议的基本功能。

2课程设计要求根据后面介绍的IP 数据包结构,编写程序接收并解析IP 数据包。

1)以命令行形式运行;ParsePacket log_file其中,ParsePacket 为程序名,log_file 为日志文件名。

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( 位)图 3.1 IP 数据包的格式服务类型字段共8 位,用于指示路由器如何处理该数据包.该字段长度由 4 位服务类型(TOS)子域和3位优先级子域组成,1 位为保留位,该字段结构如图2所示.b7 b6 b5 b4 b3 b2 b1 b0图 3.1 服务类型字段结构优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意在4位服务类型子域中b4,b3,b2,b1 分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本).表 3.3 列出了服务器类型自域的构成总长度字段为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 数据包的高层协议类型,常用的协议号如表7-3 所示.表7.3 典型的协议号头校验和字段为16位,用于存放检查报头错误的校验码。

最新解析IP数据包课程设计

最新解析IP数据包课程设计

课程设计分析为了获取网络中的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数据包的分析

《计算机通信与网络》课程设计任务书(算通071、媒体通信071、K算通071)南京工程学院通信工程学院陈瑞课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节。

它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。

《计算机通信与网络》是一门理论性和实践性都很强的课程,课程设计环节占有很重要的地位。

希望同学们要按照教学计划要求,充分利用课程设计的时间,综合应用所学知识,独立完成课程设计任务,提高自己的应用技术能力。

一、课程设计题目IP数据包的分析通过从网络中捕获IP数据包,对数据包的内容进行分析,显示分析结果。

二、课程设计目的本次课程设计的目的是设计一个解析IP数据包的程序,并根据分析结果说明IP数据包的结构及IP协议的相关问题,对IP层的工作原理有更好的理解和认识。

二、课程设计时间课程设计时间共1周。

四、课程设计要求1.整个课程设计的各个环节都要自己动手。

2.编写程序,获取网络中的IP数据包内容,将结果显示在标准输出上,并同时写入日志文件。

具体要求如下:(1)程序编译后生成的exe文件以“学号+IP”为名,输出结果至屏幕的同时,将结果写入“学号+IP”的日志文件中;(2)程序的输出内容应包括IP包的版本、头长度、服务类型、数据包长度等IP数据包格式中的相应字段;(3)键盘输入CTRL+C时退出。

3.对课程设计进行总结,撰写课程设计报告。

五、课程设计分析1.IP数据包IP数据包的格式请参见教材第18章。

2.使用原始套接字编程套接字有三种:流套接字、数据报套接字、原始套接字。

创建原始套接字的代码:Socket sock;Sock=wsasoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED;) 创建原始套接字后,IP头包含在接收的数据中。

ip数据包解析实验报告摘要doc

ip数据包解析实验报告摘要doc

ip数据包解析实验报告摘要篇一:解析IP数据包实验报告成都工业学院(课程设计实验报告)院系: 计算机工程系课程名称: 计算机网络设计名称: 解析IP数据包专业名称: 网络工程班级: 1305022姓名: 牟黎明学号: 11指导老师:刘枝盛老师成绩:设计时间:XX年12月22日—XX年12月26日成都工业学院课程设计任务书指导教师(签名):目录一、课程设计的目的和意义...............................................3 二、课程设计的内容和要求..............................................3 三、解析IP数据包设计的相关技术 (4)? 3.1 IP数据包的格式与分析? 3.2 程序分析设计......................................................4 .. (6) (6) (6) (7) (7)……………………….…………..…………….7 ?3.2.1 网卡设置? 3.2.2 程序设计? 3.2.3 程序设计? 3.2.4 程序设计? 3.2.5 程序设计四、课程设计过程 (8)? 4.1 程序流程图? 4.2源程序代码 (8) (16)……………….……………..............……………….9 ?4.3 程序运行结果? 4.3.1.登陆界面,提示输入命令符 (16)? 4.3.2.命令符输入错误后提示界面 (16)? 4.3.3.截获的IP数据包界面 (17)? 4.3.4.继续抓包图 (17)五、课程设计小结 (18)参考文献 (18)一、课程设计的目的和意义目的:本章课程设计的目的就是设计一个解析IP数据包的程序(我的编辑环境为visual2102),并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对网络层的工作原理有更好的理解和认识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计——解析IP数据包长沙理工大学目录1、课程设计目的 (2)2、课程设计要求 (2)3、程序设计分析 (2)3.1 网卡设置 (2)3.2.1 使用套接字 (3)3.2.2接收数据包 (3)3.3 定义IP头部的数据结构 (4)3.4 IP包的解析 (4)3.5 协议的定义 (5)3.6捕获处理 (5)4、运行结果 (6)5、总结 (6)6、课程设计参考资料 (7)7、源程序代码 (7)1、课程设计目的本章课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。

严格要求自己,要独立思考,按时、独立完成能力拓展训练任务。

设计报告:要求层次清楚,整洁,规范,不得相互抄袭。

2、课程设计要求1、用两个线程a和b来模拟Ethernet上的两台主机。

2、用一个双字类型变量Bus来模拟总线(将其初始化为“\0”,并且总线等于“\0”时表示总线空闲)。

3、两个子线程向总线发送自己的数据。

数据用该线程的线程号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即Bus=Bus|ID,ID为该线程的线程号)。

4、每台主机需向总线上成功发送10次数据,如果其中某次数据发送失败,则该线程结束。

5、发送流程必须遵循CSMA/CD。

随即延迟算法中的冲突窗口取0.005。

在数据发送成功3、程序设计分析3.1 网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。

但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。

对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。

我们要想获取网络设备的所有数据包,就是需要将网卡设置为混杂模式。

3.2.1 使用套接字套接字分为三种,即流套接字(Stream socket)、数据报套接字(Datagram Socket)和原始套接字(Raw Socket)。

要进行IP层数据包的接收和发送,应使用原始套接字。

创建原始套接字的代码如下:Socket sock:Sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_TP,NULL,0,WSA_FLAG_OVE RLAPPED);本设计不用考虑超时情况。

创建套接后,IP头就会包含在接收数据包中。

然后,我可以设置IP头操作选项,调用setsockopt函数。

其中flag设置为true,并设定IP-HDRINCL选项,表明用户可以亲自对IP头进行处理。

最后使用bind()函数将socket绑定到本地网卡上。

绑定网卡后,需用WSAIoctl()函数把网卡设置为混杂模式,使网卡能够接收所有的网络数据。

如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收的数据就拷贝到套接字中,因此,网卡就可以接收所有经过的IP 包。

3.2.2 接收数据包在程序中可使用recv()函数接收经过的IP包。

该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如果对所发送的数据没特殊要求,直接设为0。

因为IP数据包的最大长度是65535B,因此缓冲区的大小不能小于65535B。

设置缓冲区后,可利用循环来反复监听接收IP包,用recv()函数实现接收功能。

3.3 定义IP头部的数据结构程序需要定义一个数据结构表示IP头部。

其代码如下:int i=0; //发送成功次数int CollisionCounter=16; //冲突计数器初始值为16 double CollisionWindow=0.005; //冲突窗口值取值0.005 int randNum=rand()%3; //随机数loop: if(Bus==0) //总线空闲{Bus=Bus|ID1; //模拟发送包Sleep(12);if (Bus==ID1) //无冲突 {printf("%d Send Success\n\n",ID1); //发送成功Bus=0; //内存清零CollisionCounter=16; //复原冲突计数器Sleep(rand()%10); //随即延时i++;printf("主机a发送成功次数=%d\n\n",i);if(i<10)goto loop; //发送次数不够10次,开始下一次发送 }else{printf("%d Send Collision\n\n",ID1); //发生冲突CollisionCounter-- ;Bus=0 ; 3.4 IP包的解析解析IP包的字段有两种策略。

针对长度为8位、16位和32位的字段(或子字段)时,可以利用IP-HEADER的成员直接获取。

要解析长度不是8位倍数的字段(或子字段)时,可以利用C语言中的移位以人、及与、或操作完成。

3.5 协议的定义(包含相应的头文件#include #include):DWORD dwIoControlCode=SIO_RCVALL, /*接收所有的IP包*/dwProtocol=IPPROTO_IP; /*协议类型为IP*/3.6捕获处理1.加载 Winsock;2.创建一个接收原始IP包的socket连接;3.绑定到一个接口;4.进行WSAIoctl设置,接收所有的IP数据包。

代码如下:if (WSAIoctl(s, dwIoControlCode, &optval, sizeof(optval),NULL, 0, &dwBytesRet, NULL, NULL) == SOCKET_ERROR)5.接着设定一个线程进行捕获:(1)创建一个接收IP包的链表头;(2)设置一个标识,为真,则不断进行IP包的捕获;(3)建立一个新的结点,将捕获的数据包加入到该结点;(4)如果链表的长度达到指定的长度,创建一个线程对该链表的IP包进行解析;再设置一个在IP数据包链表不足给定的长度,而又中止IP捕获时,对链表的处理;(5)为下一个IP包链表创建一个链表头。

6.建立一个进行IP包解析并显示的线程,进行解析IP数据包,然后显示IP数据包。

4、运行结果截获IP数据包程序运行结果如下:5、总结这次计算机网络课程设计是解析IP数据包,通过这次上机充分应用了所学的计算机网络和C语言的知识,并上网搜索一部分相当资料,粗略设计出该程序。

通过本次课程设计,首先认识到了自己的不足。

在编码的过程中认识到了自己细节方面的不足,在以后计算机网络的学习过程中在理解的同时还要做到对细节的注重;当然在本次课设中最终还是实现了题目要求。

同时,觉得本次课设是十分有意义的,使自己所学的只是有了实践的地方。

6、课程设计参考资料《计算机网络(第四版)》主编:谢希仁出版社:电子工业出版社出版时间:2004年7月《计算机网络课程设计》主编:吴功宜胡晓英张仁何云王宁出版社:机械工业出版社出版或修订时间:2005年9月《计算机网络设计》主编:易建勋出版社:人民邮电出版社出版或修订时间:2007年10月7、源程序代码#include "winsock2.h"#include "ws2tcpip.h"#include "iostream"#include "stdio.h"#pragma comment(lib,"ws2_32.lib")typedef struct _IP_HEADER //定义IP头{union{BYTE Version; //版本(前4位)BYTE HdrLen; //IHL(后4位),报头标长};BYTE ServiceType; //服务类型WORD TotalLen; //总长WORD ID; //标识union{WORD Flags; //标志(前3位)WORD FragOff; //分段偏移(后13位)};BYTE TimeToLive; //生命期BYTE Protocol; //协议WORD HdrChksum; //头校验和DWORD SrcAddr; //源地址DWORD DstAddr; //目的地址BYTE Options; //选项}IP_HEADER;//逐位解析IP头中的信息void getVersion(BYTE b, BYTE & version){version=b>>4; //右移4位,获取版本字段}void getIHL(BYTE b,BYTE & result){result=(b&0x0f)*4; //获取头部长度字段}char * parseServiceType_getProcedence(BYTE b){switch(b>>5) //获取服务类型字段中优先级子域{case 7:return "Network Control";break;case 6:return "Internet work Control";break;case 5:return "CRITIC/ECP";break;case 4:return "Flash Override";break;case 3:return "Flsah";break;case 2:return "Immediate";break;case 1:return "Priority";break;case 0:return "Routine";break;default:return "Unknow";break;}}char * parseServiceType_getTOS(BYTE b){b=(b>>1)&0x0f; //获取服务类型字段中的TOS子域switch(b){case 0:return "Normal service";break;case 1:return "Minimize monetary cost";break;case 2:return "Maximize reliability";break;#include <unistd.h>#include <stdio.h>#include <sys/wait.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/types.h>#include <error.h>#include<time.h>#include<stdlib.h>#define ERROR_SHMGET -1#define ERROR_SHMAT -2#define ERROR_WAIT -3#define ERROR_FORK -4#define SLOT_TIME 0.005/*截止二进制指数退避算法的实现该算法可以表示为:t=2*τ*r为结点重新发送需要的后退延迟时间;2*τ为冲突窗口值;r为随机数,r的取值范围为[0,2^k-1],k=Min[重传次数,10];当重传16次仍不成功时,则丢弃该帧.*/static unsigned long get_backoff(const int n)//计算重传推迟时间{int k=n;k=16-k;if(k>10)//如果重传次数大于10时,重传次数置为10k=10;return (random()%(1<<k))*SLOT_TIME;//返回重传推迟时间}/*发送数据流程*/static void send_msg(const void *addr, const pid_t pid,char ch){pid_t *bus=(pid_t *)addr;int collision; //冲突计数器int k=0;//发送成功的次数for(int i=0;i<10;i++){collision=16;do{while(*bus!=0);//总线不空闲,循环等待直到总线空闲.usleep(SLOT_TIME/2);//检测到总线为空闲时就开始发送数据,因为线程A和B共享总线变量bus,所以在τ时间以内,另一个线程收不到数据,所以要进行此操作*bus|=pid; //表示另一个进程受收到模拟数据.usleep(SLOT_TIME/2);//从模拟数据发送后经过2τ时间之后进行判断.//判断是否冲突,共享内存与写入内存比较,若相同则无冲突,否则发生冲突.if(*bus!=pid){*bus=0; //复原总线为0collision--;if(collision>0){printf("%d send collision.\n", pid);usleep(get_backoff(collision)); //随机延时}else{printf("%d send failure.\n", pid); //发送失败break;}}else{*bus=0;break;}}while(1);if(collision>0){k++;printf("%d send success.\n", pid);printf("%c send success=%d.\n",ch,k);}usleep(random()%1024);}} /*主函数*/int main(){pid_t pid=0;int bus=0; /*共享内存的ID,用来模拟总线*/void *addr=0; /*指向模拟总线的首地址*/bus=shmget(IPC_PRIVATE, sizeof(pid_t), SHM_R|SHM_W);//获取共享内存if(bus==-1) /*如果申请内存失败*/{perror("shmget error.");return ERROR_SHMGET;}if((pid=fork())<0)//创建子进程a{perror("fork error.");return ERROR_FORK;}else if(pid==0){pid=getpid(); //获取子进程IDaddr=shmat(bus,0,0); //初始化共享内存为\0if(addr==(void*) -1){perror("shmat error");/*shmctl(shmid,IPC_RMID,0)是释放共享内存区,这只有在所有进程中的shmid都已经无效化后才会进行,如果shmid的引用计数没有变为0,就已经调用了shmctl(shmid,IPC_RMID,0),则该函数什么也不做,一直等到最后一个shmdt()调用时,就执行释放共享内存的任务。

相关文档
最新文档