《网络课程设计:协议编程》
- 格式:doc
- 大小:914.00 KB
- 文档页数:29
网络协议实践教程课程设计一、引言随着互联网的不断发展,网络协议已经成为人们日常生活中必不可少的一部分。
让学生全面掌握网络协议的基本概念和实际应用,具有重要的教育意义和实践价值。
因此,在网络协议实践教程中,我们设计了一系列实践课程,以帮助学生全面掌握网络协议的基本知识和实际应用。
二、课程设计2.1 课程目标通过本课程的学习,学生应该能够掌握以下内容:•了解网络协议的发展历程,了解网络协议的基本概念和分类;•掌握IP地址的分类和转换,了解IP协议的概念、特点和实际应用;•熟悉TCP/IP协议的概念、特点和实际应用;•了解DNS协议的概念、原理和实际应用;•掌握HTTP协议的概念、方法和实际应用;•理解网络安全的基本概念和方法,了解网络攻击的类型和防范措施。
2.2 课程内容2.2.1 网络协议的基本概念和分类•网络协议的概念和作用;•网络协议的分类;•常见网络协议的介绍。
2.2.2 IP地址的分类和转换•IP地址的概念和作用;•IP地址的分类;•IP地址的转换。
2.2.3 IP协议的概念、特点和实际应用•IP协议的概念、特点和作用;•IP数据包的结构和格式;•IP协议的实际应用。
2.2.4 TCP/IP协议的概念、特点和实际应用•TCP/IP协议的概念、特点和作用;•TCP/IP协议的体系结构和模型;•TCP和UDP的区别;•TCP/IP协议的实际应用。
2.2.5 DNS协议的概念、原理和实际应用•DNS协议的概念、作用和原理;•域名的分类和转换;•DNS服务器的搭建和配置。
2.2.6 HTTP协议的概念、方法和实际应用•HTTP协议的概念、特点和作用;•HTTP请求和响应的格式和内容;•HTTP方法和状态码;•HTTP协议的实际应用。
2.2.7 网络安全基础•网络安全基本概念;•常见的网络攻击类型;•网络安全的防范措施。
2.3 实验设计本课程的实验设计重在实践,设计了以下实验:2.3.1 IP地址的查询与转换以Windows平台为例,使用ipconfig命令查询本机IP地址,并将其转换成不同的格式。
c 网络编程的课程设计一、课程目标知识目标:1. 让学生理解网络编程的基本概念,掌握套接字编程的基础知识。
2. 学会使用至少一种编程语言(如Python)进行网络编程,实现客户端与服务器之间的通信。
3. 了解网络协议的基本原理,如TCP/IP协议,并能在实际编程中正确运用。
技能目标:1. 培养学生独立编写网络程序的能力,能根据需求设计和实现简单的网络应用。
2. 培养学生运用所学知识解决实际问题的能力,如网络通信中的异常处理、数据传输优化等。
3. 提高学生的团队协作能力,能在小组项目中分工合作,共同完成网络编程任务。
情感态度价值观目标:1. 培养学生对网络编程的兴趣,激发学习积极性,提高自主学习能力。
2. 培养学生具备良好的编程习惯,注重代码规范和优化,提高代码质量。
3. 培养学生的创新精神,敢于尝试新技术和新方法,为我国网络技术的发展贡献力量。
分析课程性质、学生特点和教学要求,本课程目标旨在让学生掌握网络编程的基本知识和技能,培养学生具备实际编程能力和团队协作精神。
通过本课程的学习,学生将能够独立设计和实现简单的网络应用,为今后的学习和工作打下坚实基础。
同时,注重培养学生的编程兴趣和创新精神,提高我国网络技术人才的素质。
和二、教学内容教学内容围绕课程目标进行选择和组织,确保科学性和系统性。
主要包括以下几部分:1. 网络编程基本概念:介绍网络编程的目的、意义和基本原理,如IP地址、端口号、网络协议等,为学生打下网络编程的基础。
2. 套接字编程:详细讲解套接字的原理和使用方法,包括TCP和UDP协议的套接字编程,以及客户端与服务器之间的通信过程。
3. 编程语言实践:以Python语言为例,教授学生如何利用套接字库进行网络编程,实现简单的客户端和服务器程序。
4. 网络协议原理:介绍TCP/IP协议栈的基本原理,重点讲解IP、TCP、UDP 等协议的工作机制。
5. 网络编程实例分析:分析经典网络编程案例,如聊天室、文件传输等,让学生了解实际应用场景。
协议分析网络编程课程设计一、课程目标知识目标:1. 理解网络编程中协议的基本概念和作用;2. 掌握常用的网络协议及其特点,如TCP/IP、HTTP、FTP等;3. 学会分析网络协议的报文结构和通信过程;4. 了解网络编程中的异常处理和安全性问题。
技能目标:1. 能够运用所学知识编写简单的网络应用程序;2. 培养实际操作中分析、解决问题的能力;3. 提高团队协作和沟通能力,通过分组讨论、展示等形式,分享学习心得和经验。
情感态度价值观目标:1. 培养学生对网络编程的兴趣,激发学习积极性;2. 培养学生的探究精神和创新意识,敢于尝试和挑战;3. 增强学生的网络安全意识,了解网络协议在实际应用中的道德和法律规范。
课程性质分析:本课程为计算机网络编程相关课程,旨在帮助学生掌握网络编程的基本知识和技能,提高解决实际问题的能力。
学生特点分析:本课程面向高中年级学生,他们在之前的学习中已经具备了一定的编程基础和网络知识,具有较强的学习能力和探究欲望。
教学要求:1. 结合实际案例,以问题为导向,引导学生主动学习和思考;2. 注重理论与实践相结合,提高学生的实际操作能力;3. 创设良好的学习氛围,鼓励学生积极参与讨论,分享学习成果;4. 注重培养学生的创新精神和团队合作能力,提高综合素质。
二、教学内容1. 协议基础理论- 网络协议的概念与作用- 协议分层模型(OSI七层模型与TCP/IP四层模型)- 常见网络协议及其特点2. 网络协议分析- TCP/IP协议族分析- IP协议报文结构- TCP协议工作原理及报文结构- UDP协议特点及应用场景- 应用层协议分析- HTTP协议请求与响应过程- FTP协议命令与数据传输- 其他常用应用层协议介绍3. 网络编程实践- 基于TCP/UDP协议的编程实践- 网络应用程序设计步骤与实例分析- 异常处理与网络编程安全性4. 教学案例分析- 分析实际网络应用程序中的协议应用- 案例讨论与分组报告5. 教学进度安排- 第一周:协议基础理论- 第二周:网络协议分析- 第三周:网络编程实践- 第四周:教学案例分析及总结教学内容依据课程目标,结合教材相关章节,确保科学性和系统性。
HUNAN CITY UNIVERSITY网络协议编程课程设计说明书设计题目:基于MFC框架的Echo协议模拟软件的设计与实现专业:网络工程学生姓名:*****班级学号:1206101-28分组成员: 1206101-05 *****、1206101-31******1206101-28何***指导教师:****老师*****老师2015 年 07月 03日《网络协议编程课程设计》说明书学号:1206101-28姓名:****一、设计时间2015年06月29日-----07月03日。
二、设计地点湖南城市学院信息楼507机房。
三、设计目的1、巩固《网络协议编程》课程涉及的基本知识,培养灵活运用知识进行独立设计的能力;2、掌握TCP/IP网络程序框架、Winsock API、高级网络编程API的使用;3、提高综合运用所学的理论知识独立分析和解决问题的能力;4、进一步熟悉利用Visual C++6.0进行开发的能力;5、培养查阅资料,独立思考问题的能力。
四、设计小组成员1206101-05**** 1206101-31**** 1206101-28****五、指导老师****老师、****老师。
六、设计课题经过小组组员的讨论,决定选取选题(18 基于MFC框架的Echo协议模拟软件的设计与实现),编写一个基于MFC框架的Echo协议模拟软件。
理由:1、Echo协议(也称回声协议)是一个非常简单的协议,它主要用于网络可达性的检测中。
2、该系统功能相对简单,易于实现,适于初学者。
3、该系统牵涉到TCP协议、CAsysncSocket类、C/S模式以及MFC框架,采用VC6.0编制程序模拟Echo协议的基本功能,需要灵活运用这些知识解决实际问题,有利于培养网络系统开发的实际动手能力。
七、基本思路及关键问题的解决方法本系统的开发采用基于MFC的Echo协议的C/S模式,服务器在端口7检测接收到的信息,如果收到信息,则原封不动地重发回客户端。
网络协议编程课程设计java一、课程目标知识目标:1. 让学生理解网络协议编程的基本概念,掌握Java语言实现网络编程的方法;2. 使学生掌握TCP/IP协议族的原理,了解不同网络协议的特点和应用场景;3. 引导学生掌握套接字编程技术,学会使用Java语言实现客户端与服务器端的数据传输。
技能目标:1. 培养学生运用Java语言编写网络应用程序的能力,学会使用套接字进行网络通信;2. 培养学生分析、解决网络编程中遇到的问题,提高实际编程能力;3. 培养学生团队协作能力,学会共同开发、调试网络应用程序。
情感态度价值观目标:1. 培养学生热爱编程,对网络协议编程产生浓厚兴趣;2. 培养学生积极探究、主动学习的精神,敢于面对编程过程中的困难与挑战;3. 引导学生树立正确的网络安全意识,认识到网络协议编程在实际应用中的重要性。
本课程针对高年级学生,具备一定的Java编程基础和网络知识。
课程性质为理论与实践相结合,注重培养学生的实际编程能力。
教学要求学生在理解网络协议原理的基础上,通过实际编程实践,掌握Java网络编程技术,培养解决实际问题的能力。
课程目标的设定旨在使学生能够达到上述学习成果,为后续深入学习网络编程打下坚实基础。
二、教学内容1. 网络协议编程基本概念:介绍网络编程的背景、意义,对比不同网络协议,如TCP、UDP、HTTP等,分析各自优缺点及适用场景。
教材章节:第1章 网络编程概述2. Java网络编程基础:讲解Java网络编程的核心类库,如包,重点介绍InetAddress、Socket、ServerSocket等类的使用方法。
教材章节:第2章 Java网络编程基础3. 套接字编程:详细讲解套接字编程原理,包括TCP套接字和UDP套接字的使用,举例说明如何实现客户端与服务器端的数据传输。
教材章节:第3章 套接字编程4. 多线程网络编程:介绍多线程在网络编程中的应用,学会使用Java多线程实现并发网络通信,提高程序性能。
网络编程协议课程设计一、课程目标知识目标:1. 理解网络编程协议的基本概念和作用;2. 掌握常见的网络协议(如TCP/IP、HTTP、FTP等)的工作原理和特点;3. 了解网络编程中数据传输、连接建立和维护的相关知识;4. 学会运用网络编程协议解决实际问题。
技能目标:1. 能够运用所学知识,编写简单的网络应用程序;2. 能够熟练使用网络协议分析工具,对网络数据进行抓包和分析;3. 能够诊断和解决网络编程中遇到的问题;4. 提高团队协作和沟通能力,通过小组讨论和实践,共同完成网络编程项目。
情感态度价值观目标:1. 培养学生对网络编程的兴趣,激发学习热情;2. 培养学生的创新意识和实践能力,敢于尝试新方法解决问题;3. 增强学生的网络安全意识,遵守网络道德规范,尊重他人隐私;4. 培养学生的团队协作精神,提高沟通能力和责任感。
本课程针对高中年级学生,结合网络编程协议的知识深度,旨在帮助学生掌握网络编程的基本知识和技能,培养他们运用网络编程解决实际问题的能力。
课程目标具体、可衡量,以便学生和教师在教学过程中能够清晰地了解课程的预期成果。
通过分解课程目标为具体的学习成果,教师可以更好地进行教学设计和评估,提高课程的实用性和有效性。
二、教学内容1. 网络编程基础理论- 网络协议概念与分层模型- 网络编程的基本概念与编程接口2. 常见网络协议及其工作原理- TCP/IP协议族:IP协议、TCP协议、UDP协议- 应用层协议:HTTP协议、FTP协议、SMTP协议、DNS协议3. 网络编程实践- 套接字编程:基于TCP和UDP的网络应用程序编写- 网络数据传输:数据编码与解码、数据完整性校验- 网络应用案例分析:简单聊天室、文件传输等4. 网络编程调试与分析- 网络抓包工具:Wireshark的使用方法- 网络编程问题诊断与调试技巧5. 网络编程项目实战- 项目规划与分工- 项目实施与进度控制- 项目展示与评价教学内容依据课程目标进行选择和组织,注重科学性和系统性。
计算机网络课程设计报告课程设计项目名称:网络协议与应用程序设计系:专业::实验地点:实验日期:一、目的与要求基于典型的网络协议和网络应用的源代码进行分析,通过本科目,使学员了解网络通信流程,掌握网络通信程序的设计以及通信协议的应用技能,培养学员网络协议与网络应用的设计实现能力。
二、实验环境Visual C++6.0三、程序设计3.1 IP报头格式typedef struct tagIPINFO{u_char Ttl; // Time To Liveu_char Tos; // Type Of Serviceu_char IPFlags; // IP flagsu_char OptSize; // Size of options datau_char FAR *Options; // Options data buffer}IPINFO, *PIPINFO生存时间+服务类型+标识字段+数据报大小+数据报缓存区3.2 ICMP报头格式typedef struct tagICMPECHO{u_long Source; // Source addressu_long Status; // IP statusu_long RTTime; // Round trip time in millisecondsu_short DataSize; // Reply data sizeu_short Reserved; // Unknownvoid FAR *pData; // Reply data bufferIPINFO ipInfo; // Reply options}ICMPECHO, *PICMPECHO;源地址+IP状态+往返延迟+返回数据大小+未知接受数据+返回数据缓存+返回IP报头数据函数流程设计//初始化模块:初始化全局标量,初始化加载库。
void main(int argc, char **argv){WSADATA wsaData; // WSADATAICMPECHO icmpEcho; // ICMP Echo reply bufferHANDLE hndlIcmp; // LoadLibrary() handle to ICMP.DLL HANDLE hndlFile; // Handle for IcmpCreateFile() LPHOSTENT pHost; // Pointer to host entry structurestruct in_addr iaDest; // Internet address structure DWORD *dwAddress; // IP Addressint nRet; // General use return codeIPINFO ipInfo; // IP Options structureDWORD dwRet; // DWORD return codeint x;// Check argumentsif (argc != 2){fprintf(stderr,"\nSyntax: pingi HostNameOrIPAddress\n");return;}// Dynamically load the ICMP.DLLhndlIcmp = LoadLibrary("ICMP.DLL");if (hndlIcmp == NULL){fprintf(stderr,"\nCould not load ICMP.DLL\n");return;}// Retrieve ICMP function pointerspIcmpCreateFile = (HANDLE (WINAPI *)(void))GetProcAddress(hndlIcmp,"IcmpCreateFile");pIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE))GetProcAddress(hndlIcmp,"IcmpCloseHandle");pIcmpSendEcho = (DWORD (WINAPI *)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD))GetProcAddress(hndlIcmp,"IcmpSendEcho");// Check all the function pointers//功能控制模块:计算校验和填充数据报文、释放占用资源。
2021~2022学年第一学期《网络协议编程》课程教学实施方案网络工程系一、课程概况【课程名称】网络协议编程【课程性质】专业必修课,必修考试【教学对象】专业:网络19-[1-2]班层次:四年制大三本科生人数:共 73 人【学时/学分】48/3【前修课程】程序设计、算法与数据结构(一、二、三)、程序设计、算法与数据结构实验(一、二、三)、离散结构、计算机网络原理与技术二、教学地位与作用及主要教学目的该课程是网络专业的一门重要专业必修课。
内容包括C#语言的基础知识、面向对象的程序设计、C#的Windows编程方法、网络编程的基本概念、网络套接字编程以及多线程编程的方法概述等。
还包括TCP/UDP编程、FTP编程、电子邮件协议编程、 HTTP编程、Web Service 编程以及网络安全编程等。
本课程要求学生掌握网络编程原理、套接字以及多线程的开发、基于各种不同协议的网络应用模块的开发。
三、课程选用教材【使用教材】《C#网络通信程序设计》作者:张晓明. 清华大学出版社. 2015年4月选用依据:本书是一本系统介绍C#网络编程技术的教材,全书共11章,由两部分组成。
第1部分(第1~5章)为基础知识,内容包括.NET集成开发环境、C#语言的基础知识、面向对象的程序设计、C#的Windows编程方法、网络编程的基本概念、网络套接字编程以及多线程编程的方法概述等。
第2部分(第6~11章)介绍网络编程的几个常用领域,内容包括TCP/UDP编程、FTP编程、电子邮件协议编程、HTTP编程、Web Service编程以及网络安全编程等。
【参考教材】《Visual C#网络编程技术与实践》作者:梅晓冬、颜烨青. 清华大学出版社. 2008年6月《TCP/IP网络编程》作者:[韩] 尹圣雨主编. TCP/IP网络编程.北京:人民邮电出版社.2014年。
《TCP/IP详解原书第2版》作者:[美] 凯文R.福尔(Kevin R. Fall)著. 北京:机械工业出版社. 2016年四、教学手段和方法本课程为一门工程性较强的计算机专业基础课,课程结合思政教学,既含有理论部分,又要求实践环节,三者相互促进。
计算机网络课程设计题目一-------解析IP数据包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包的格式有一定的了解,图7-1给出了IP协议的数据包格式。
IP数据包的第一个字段是版本宇段,其长度为4位,表示所使用的IP协议的版本。
目前的版本是iPv4,版本字段的值为4,下一代的版本是IPv6,版本字段的值为6。
本程序主要针对版本值为4的IP数据包的解析。
报头标长(IHL)字段为4位,它定义了以4B为一个单位的IP包的报头长度。
报头中除了选项字段和填充域字段外,其他各字段是定长的。
因此,IP数据包的头长度在20-40B之间,是可变的。
3)将累加的结果取反码,就是头校验和。
当收到一个IP包时,要检查报头是否出错,就把报头中的所有数据以16位为单位进行累加,若累加的结果为0,则报头没有出错。
地址字段包括源地址和目的地址。
源地址和目的地址的长度都是32位,分别表示发送数据包的源主机和目的主机的IP地址。
选项字段的长度范围是0—40BYTE,主要用于控制和测试。
在使用选项字段的过程中,有可能出现报头部分的长度不是32位的整数倍的情况。
如果出现这种情况,就需要通过填充位来凑齐。
4课程设计分析为了获取网络中的IP数据包,必须对网卡进行编程,在这里我们使用套接字(socket)进行编程。
但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。
对于其他形式的数据包,如已到达网络接口但却不是发送到此地址的数据包,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。
我们要想获取流经网络设备的所有数据包,就需要将网卡设置为混杂模式。
本程序主要由三部分构成:初始化原始套接字,反复监听捕获数据包和解析数据包。
下面就结合核心代码对程序的具体实现进行讲解,同时使程序流程更加清晰,去掉了错误检查等保护性代码。
1.使用原始套接字套接字分为3种,即流套接字(Stream Socket)、数据报套接字(Datagram Socket)和原始套接字(Raw Socket)。
要进行IP层数据包的接收和发送,应使用原始套接字。
创建原始套接字的代码如下:SOCKET sock;sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA FLAG OVERLAPPED);在WSASoccket函数中,第一个参数指定通信发生的区字段,AF_INET是针对Internet的,允许在远程主机之间通信。
第二个参数是套接字的类型,在AF_INET地址族下,有SOCK_STREAM、SOCK DGRAM,SOCK_RAW三种套接字类型。
在这里,我们设置为SOCK RAW,表示我们声明的是一个原始套接字类型。
第三个参数依赖于第二个参数,用于指定套接宇所用的特定协议,这里使用IP协议。
第四个参数为WSAPROTOCOL_INFO位,该位可以置空。
第五个参数保留,永远置0。
第六个参数是标志位,WSA_FLAG_OVERLAPPED表明可以使用发送接收超时设置,本课程设计也可以把这个标志位设置为NULL,因为本设计不用考虑超时情况。
创建原始套接字后,IP头就会包含在接收的数据中。
然后,我们可以设置IP头操作选项,调用setsockopt函数。
其中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_INET;addr_in.sin_port=htons(6000);/*绑定socket*/bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in));填写sockaddr_in的内容时,其地址值应填写为本机IP地址,本机IP地址可以通过gethostbyname()函数获取;端口号可以随便填写,但不能与系统冲突;协议族应填为AF_INET。
注意,sockaddr_in结构的值必须是以网络字节顺序表示的值,而不能直接使用本机字节顺序的值。
使用htons()函数可以将无符号短整型(unsigned short)的主机数据转换为网络字节顺序的数据。
最后使用bind()函数将socket绑定到本地网卡上。
绑定网卡后,需要用WSAIoctl()函数把网卡设置为混杂模式,使网卡能够接收所有网络数据,其关键代码如下:#define SIO_RCV ALL _WSAIOW(IOC_VENUOR,1)DWORD dwBufferLen[10];DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(SnifferSOcket,IO_RCV AL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收到的数据就拷贝到套接字中。
因此,网卡就可以接收所有经过的IP包。
2.接收数据包在程序中可使用recv()函数接收经过的IP包。
该函数有四个参数,第一个参数接收操作所用的套接宇描述符;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是—个附加标志,如果对所发送的数据没特殊要求,直接设为0。
因为IP数据包的最大长度是65535B,因此,缓冲区的大小不能小于65535B。
设置缓冲区后,可利用循环来反复监听接收IP包,用recv()函数实现接收功能的代码如下:#define BUFFERSIZE 65535char buffer[BUFFElSIZE)J //设置缓冲区while(true){recv(sock,buffer,BUFFElSIZE,O);//接收数据包/*然后是解析接收的IP包*/……………….}3.定义IP头部的数据结构程序需要定义—个数据结构表示IP头部。
这个数据结构应该和图7-1吻合,其代码如下:typedef struct_IP_HEADER //定义IP头{union{BYTE Version;//版本(前4位)BYTE HdrLen;//报头标长(后4位), IP头的长度);};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头部结构,不考虑数据部分。
在捕获IP数据包后,可以通过指针把缓冲区的内容强制转化为IP_HEADER数据结构。
IP_HEADER ip=*(IP_EEADER *) buffer;4.IP包的解析解析IP包的字段有两种策略。
针对长度为8位、16位和31位的字段(或子宇段)时,可以利用IP_HEADER的成员直接获取。
要解析长度不是8位倍数的字段(或子字段)时,可以利用C语言中的移位以及与、或操作完成。
下面给出了通过IP_HEADER解析IP头各个字段的代码。
/*获取版本字段*/ip.Version>>4;Array/*获取头部长度字段·/ip.HdrLen & 0xof;/*获取服务类型字段中的优先级子域‟/ip.ServlceType>>5;/*获取服务类型字段中的TOS子域·/(ip.ServiceType>>1)&0xOf;/*获取总长度字段·/ip.TotalLen;/*获取标识字段*/ip.ID;/*解析标志字段*/DF=(iP.Flags>>14)& 0x01:MF=(ip.Flags>>13)& 0x01;/*获取分段偏移字段。
/ip.FragOff & 0x1fff;/od(取生存时间字段·/ip.TimeToLive;/*获取协议字段·/ip.Protocol;/*获取头校验和字段·/ip.HdrChksum;/*解析源IP地址字段*/inet_ntoa(*(in addr*)& ip.SrcAddr;/·解析目的IP地址字段*/inet_ntoa(*(in_addr*)& ip.DstAddr)5.参考程序流程图图7-4给出—·个供参考的程序流程图。