解析IP数据包课程设计
计算机网络课程设计IP数据包的捕获与分析.docx
计算机科学与技术学院课程设计成绩单C+:72~74分C:68~71分C-:64~67分D:60~63分F:<60分武汉科技大学计算机科学与技术学院制表IP数据包捕获与解析程序设计一、需求分析在本次课程设计要求捕获本机网卡的IP包,对捕获的IP包进行解析。
要求输出版本号、总长度、标志位、片偏移、协议、源地址和目的地址七个字段。
要求遵循RFC791的相关IP协议规定,捕获通过本地网卡的IP数据包。
实现对指定数量的IP数据包的捕获过程。
,需要定义好IP数据报等相关的数据结构以对IP数据包的各个字段进行保存,以及该IP数据包的上一层使用的协议名称。
在对IP数据包进行解析时要将捕获的数据流存储在一个缓冲区中。
二、概要设计1.总体流程算法:创建原始套接字并绑定本地网卡,将套接字设置为混杂模式监听网卡并根据输入的数量捕获流经本地的IP包。
IP数据包的格式:NoYes开始创建并初始化原始套接字填充sockaddr_in并绑定socket 设置网卡混杂模式监听网卡捕获和解析IP数据报输出解析字段结束是否达到需要次数IP数据包由首部和数据两部分组成。
首部的前一部分是固定长度,共 20 字节,是所有IP数据报必须具有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的,可选字段之后是数据部分。
其中,首部固定部分中本次课程设计需要解析的各字段的长度及意义如下:(1)版本占4位,指IP协议的版本。
通信双方使用的IP协议版本必须一致。
目前广泛使用的IP协议版本号为4(即IPv4)。
关于IPv6,目前还处于草案阶段。
(2)总长度总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。
当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
ip数据课程设计
ip数据课程设计一、教学目标本节课的教学目标是让学生了解IP地址的基本概念、作用和分类,掌握IP地址的表示方法和计算方式,了解IP地址的分配和管理机制,培养学生运用IP地址解决实际问题的能力。
1.了解IP地址的基本概念和作用。
2.掌握IP地址的分类及其特点。
3.掌握IP地址的表示方法及其计算方式。
4.了解IP地址的分配和管理机制。
5.能够运用IP地址解决实际问题。
6.能够使用网络工具查询IP地址相关信息。
情感态度价值观目标:1.培养学生对网络技术的兴趣和好奇心。
2.培养学生遵守网络规则的意识。
二、教学内容本节课的教学内容主要包括以下几个部分:1.IP地址的基本概念和作用。
2.IP地址的分类及其特点。
3.IP地址的表示方法及其计算方式。
4.IP地址的分配和管理机制。
5.IP地址在实际应用中的案例分析。
三、教学方法为了达到本节课的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解IP地址的基本概念、分类、表示方法和计算方式等知识,使学生掌握IP地址的相关知识。
2.案例分析法:通过分析实际应用中的IP地址案例,使学生了解IP地址在实际中的应用。
3.讨论法:学生进行小组讨论,培养学生运用IP地址解决实际问题的能力。
4.实验法:安排学生进行网络实验,让学生亲自动手操作,加深对IP地址的理解。
四、教学资源为了支持本节课的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的网络技术教材,为学生提供系统的理论知识。
2.参考书:提供相关的网络技术参考书籍,丰富学生的知识视野。
3.多媒体资料:制作精美的PPT课件,生动展示IP地址的相关知识。
4.实验设备:准备网络实验设备,让学生亲身体验IP地址的应用。
五、教学评估为了全面、客观地评估学生的学习成果,我们将采取以下评估方式:1.平时表现:通过观察学生在课堂上的参与度、提问回答等情况,评估学生的学习态度和理解程度。
2.作业:布置与IP地址相关的作业,评估学生对知识点的掌握情况。
解析IP数据包课设
目录1课程设计目的 (2)2 课程设计要求 (2)3相关知识 (2)4课程设计分析 (4)5 程序清单及注释 ............................... 错误!未定义书签。
6 运行结果分析及结论 (12)7 参考文献 ............................................ 错误!未定义书签。
1、课程设计目的:本次课程设计的目的是设计一个解析IP数据包的程序,并根据分析结果说明IP数据包的结构及IP协议的相关问题,对IP层的工作原理有更好的理解和认识。
2、课程设计要求:本实验的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下1 以命令行形式运行:ipparse logfile, 其中ipparse是程序名,而logfile则待变记录结果的日志文件。
2 在标准输出和日志文件中写入捕获的IP数据包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标识、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3 当程序接收到键盘输入Ctrll+C是退出。
3、相关知识:互联网络层是TCP/IP协议参考模型中的关键部分。
IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传递给数据链路层。
IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP 数据包格式,以消除个通信子网间的差异,从而为信息发送方和接收方提供了透明的传输通道编制本程序前,首先要对IP包的格式有一定的了解。
图7-1给出了IP协议的数据包格式0 4 8 16 19 24 31服务类型总长度版本报头标长标识标致片偏移生存时间协议头校验和源IP地址目的IP地址选项填充域数据部分图7-1 IP数据包的格式IP数据包的第一个字段是版本字段,其长度为4位,表示所使用的IP协议的版本。
本程序主要针对版本值为4的IP数据包的解析。
计算机网络课程设计报告-IP数据包的捕获与分析
CENTRAL SOUTH UNIVERSITY计算机网络课程设计报告题目IP数据包的捕获与分析学生姓名廖成班级学号0902130408指导教师穆帅设计时间2015年11月目录第一章绪论 (3)1.1 课题研究背景 (3)1.2 课题研究的意义 (3)第二章课程设计的目的与要求 (3)2.1 课程设计的目的 (3)2.2 课程设计的要求 (4)第三章课程设计的内容 (4)3.1 课程设计的内容 (5)3.2 内容的要求 (5)第四章程序设计与分析 (5)4.1 IP数据包 (5)4.1.1 数据包的格式说明 (5)4.1.2 头部数据结构的定义 (7)4.2 部分程序实现 (7)4.2.1 套接字的使用 (7)4.2.2 数据库的使用 (8)4.2.3 各部分详细实现 (9)4.4 程序流程图 (12)4.4.1 主程序流程图 (12)4.4.2 捕获并分析数据包头部模块流程图 (13)4.4.3 头部信息存数据库模块 (13)第五章实验结果 (14)5.1 程序截图 (14)第六章总结 (16)6.1 实验心得 (16)第七章附录 (17)参考文献 (17)第一章绪论1.1 课题研究背景随着计算机技术的发展,网络的应用迅速普及,网络已日益成为生活中不可或缺的工具。
同时,网络的安全性与可靠性日益受到人们的重视,安全性指的是网络上的信息不被泄露、更改和破坏,可靠性指的是网络系统能够连续、可靠地运行,网络服务不被中断。
网络数据包捕获、监听与分析技术是网络安全维护的一个基础技术同时也是网络入侵的核心手段。
所以研究有关数据包捕获和分析技术对保证网络的健康、安全运行是很有意义的。
1.2课题研究的意义计算机之间进行通信时,交互的所有信息都封装在数据包中。
因此,通过采集网络数据并对其进行相应的分析,可以清楚地了解到进行通信的计算机的通信目的。
通过分析采集到的数据包可以确定网络是否受到入侵;其次也可以通过采集到的数据包来分析应用程序可能出现的问题及原因;此外,通过网络数据的采集和统计可以清楚地了解整个网络在各个时段内的网络负载情况,从而判断网络使用得是否合理。
计算机网络课程设计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数据包
课 程 设 计2014——2015学年 第2学期课程名称 计算机网络学 院 计算机科学与技术学院专 业 软件工程专业班 级***姓 名 *** 指导教师课程实践设计任务书学生姓名: * ** 专业班级:软件sy1201班指导教师:刘东飞工作单位:计算机学院题目三: 解析IP数据包初始条件:(1)学习相关知识(2)C/C++/VC/VB/JAVA语言(3)PC机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序具体要求如下:1)以命令行形式运行,ipparse logfile,其中ipparse是程序名,而logfile则代表记录结果的日志文件。
2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP 地址和目的IP地址等内容。
3)当程序接收到键盘输入Ctrl+C时退出。
时间安排:第一、二天:查阅资料,学习算法第三、四天:编程调试第五天:书写报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录一、知识背景 (5)1.网络协议 (5)2.IP数据报格式 (5)二、程序设计分析 (7)1.准备 (7)2.程序框架 (8)3.数据结构 (8)4.获取网卡设备列表 (9)5.设置为混杂模式 (10)6.循环接受IP数据报 (10)7.解析IP数据报 (10)三、程序截图 (11)四、课设总结 (13)五、程序清单 (14)一、知识背景1. 网络协议开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。
数据通信与网络课程设计实践报告- 解析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数据包解析
目录1.需求分析---------------------------------------------------------------------12.总体设计---------------------------------------------------------------------13.详细设计---------------------------------------------------------------------24.源程序------------------------------------------------------------------------65.运行结果----------------------------------------------------------------------126.实验总结-----------------------------------------------------------------------147.参考资料-----------------------------------------------------------------------14一.需求分析本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:1)以命令行形式运行:hhb logfile,其中hhb是程序名, 而logfile则代表记录结果的日志文件。
2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3)当程序接收到键盘输入Ctrl+C时退出二.总体设计为了获取网络中的IP数据包,必须对网卡进行编程,我们使用套接字进行编程。
计算机网络课程设计IP数据包的捕获与分析
CENTRAL SOUTH UNIVERSITY计算机网络课程设计报告目录第一章课程设计的目的与要求 (1)1.1 课程设计的目的 (1)1.2 课程设计的要求 (1)第二章课程设计的内容 (3)2.1 课程设计的内容 (3)2.2 内容的要求 (3)第三章程序分析与设计 (4)3.1 IP数据包 (4)3.1.1 IP数据包的格式说明 (4)3.1.2 IP数据包的格式 (4)3.1.3 IP数据包的C++定义 (5)3.1.4 IP数据包的解析 (6)3.2 套接字 (7)3.1.4 套接字的使用 (7)3.1.4 使用原始套接字 (7)3.3 接受数据包 (7)第四章实验结果 (10)4.1 程序截图 (10)第五章总结 (11)5.1 实验心得 (11)第六章附录 (12)6.1 源代码 (12)第一章课程设计的目的与要求1.1 课程设计的目的计算机网络课程设计的目的,是为了让学生更深入地掌握计算机网络的核心内容,实现理论与实践相结合。
让学生用具体的实践成果,体现对理论知识的掌握程度。
有利于学生提高计算机网络的实践能力,加深对计算机网络理论知识的理解。
1.2 课程设计的要求(1)编写程序,实现系统的基本功能,鼓励自行增加新功能;(2)要有用户界面:要求至少采用文本菜单界面;鼓励采用图形菜单界面;(3)写课程设计报告,内容包括:●封面(参见附录I)●需求分析:以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?给出功能模块图和流程图。
同时明确规定:输入的形式和输出值的范围;输出的形式;程序所能够达到的功能;测试数据,包括正确的输入与其输出结果和含有错误的输入与其输出结果。
●概要设计:包括程序设计组成框图,程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。
●详细设计:包括模块功能说明(如函数功能、入口与出口参数说明,函数调用关系描述等),每个模块的算法设计说明(可以是描述算法的流程图)。
计算机网络课程设计(第七章)解析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数据包一、课题内容和要求本课程设计的目的是设计一个解析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数据包姓名:院(系):计算机与通信工程学院专业班级:网络工程学号:指导教师:成绩:时间: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数据包的解析专业:计算机科学与技术(交通信息工程)班级: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数据包学生姓名:学号:专业班级:计算机科学与技术同组姓名:指导教师:设计时间: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数据包
目录一、课程设计的目的 (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.课程设计目的
题目:解析IP数据包
本章课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
2.课程设计要求
本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:
1.以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile则代表记录结果的日志文件
2.在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容
3.当程序接收到键盘输入Ctrl+C时退出
3IP数据包相关知识
互联网络层是TCP/IP协议参考模型中的关键部分。
IP协议把传输层
送来的消息组装成IP数据包,并把IP数据包传递给数据链路层。
IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网间的差异,从而为信息发送方和接收方提供了透明的传输通道编制本程序前,首先要对IP包的格式有一定的了解。
图3-1给出了IP协议的数据包格式。
- 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 31图1 IP数据包的格式服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.B7 b6 b5 b4 b3 b2 b1 b0图2 服务类型字段结构\优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义.D(延迟),T(吞吐量),R(可靠性)与C(成在4位服务类型子域中b4,b3,b2,b1分别表示标识字段的长度为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_OVERRLAPP ED);在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;= *(in_addr*)pHostIP->h_addr_list[0];`=AF_TNET;=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_RCVALL_WSAIOW(IOC_VENDOR,1)DWORD dwBufferLen[10];】DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(SnifferSocket,IO-RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwB ufferLen,Sizeof(dwBufferLen),&dwByteReturned,NULL,NULL);如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收到的数据就拷贝到套接字中。
因此,网卡就可以接收所有经过的IP包。
2.接收数据包在程序中可使用RECV()函数接收经过的IP包。
该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收到缓冲区的地址;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如果对所发送的数据没特殊要求,直接设为0。
因为IP数据包的最大长度是65536B,因此缓冲区的大小不能小于65535B。
设置缓冲区后,可利用循环来反复监听接收IP包,用recv()函数接收功能的代码如下:#dedine BUFFER_SIZE 65535Char buffer[BUFFER_SIZE];)3.定义IP头部的数据结构程序需要定义一个数据结构表示IP头部。
这个数据结构应该和图7-1吻合,其代码如下:typedef struct _IP_HEADER 0f0F考程序流程图图7-4给出一个供参考的程序流程图。
五.实现过程、#include ""#include ""#include ""#include ""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;void getVersion(BYTE b,BYTE & version) {version =b>>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 "Falsh";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&0x1ffff;}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 "UPD";case 41:return "IPv6";case 46:return "OSPF";default:return "UNKNOWN";>}}void ipparse(FILE * file,char *buffer){IP_HEADER ip=*(IP_HEADER *)buffer;fseek(file,0,SEEK_END);BYTE version;getVersion,version);fprintf(file,"版本=%d\r\n",version);BYTE headerLen;getIHL,headerLen);fprintf(file,"头长度=%d(BYTE)\r\n",headerLen);fprintf(file,"服务类型=%s,%s\r\n");、parseServiceType_getProcedence;parseServiceType_getTOS;fprintf(file,"数据报长度=%d(BYTE)\r\n",;fprintf(file,"数据报ID=%d\r\n",;BYTE DF,MF;。