《网络课程设计:协议编程》
- 格式: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年四、教学手段和方法本课程为一门工程性较强的计算机专业基础课,课程结合思政教学,既含有理论部分,又要求实践环节,三者相互促进。
网络编程实战网络课程设计网络编程是计算机科学领域中的一个重要分支,它涉及到如何在计算机网络上实现数据的传输和通信。
随着互联网的快速发展,网络编程的需求也越来越大。
为了提高学生在网络编程方面的实践能力,我们设计了本网络编程实战网络课程。
一、课程简介本课程旨在通过实际项目案例,让学生学习并掌握网络编程的基本概念、工具和技术。
课程将从理论和实践相结合的角度,引导学生深入了解网络编程的原理,并通过实战项目的设计与实施,培养学生解决实际问题的能力。
二、课程目标1. 掌握网络编程的基本知识:包括协议、套接字、IP地址等;2. 理解网络编程的工作原理:包括客户端与服务端的通信流程、数据传输的方式等;3. 熟练使用网络编程工具:如Python的socket模块、Java的Socket 类等;4. 能够设计并实现简单的网络应用:如聊天室、文件传输、远程控制等;5. 提升问题解决与合作能力:通过团队合作完成实践项目,培养学生的团队协作精神和解决问题的能力。
三、课程内容1. 网络编程基础- 网络概述:了解计算机网络的基本概念、网络拓扑结构等;- 协议与套接字:学习常见的网络协议和套接字的基本概念;- IP地址与端口:理解IP地址和端口的作用,掌握常见的IP地址分类;- 数据传输方式:介绍网络数据传输的方式,如TCP和UDP协议。
2. 网络编程工具与技术- Python中的socket模块:学习使用Python语言进行网络编程的基本操作;- Java中的Socket类:掌握Java语言中Socket类的使用方法和技巧;- 数据编码与解码:了解常见的数据编码方式,如ASCII、UTF-8等;- 网络编程安全性:介绍网络编程中的安全问题和防护措施。
3. 实践项目设计- 聊天室程序设计:设计一个简单的聊天室程序,实现多客户端的实时通信;- 文件传输应用设计:实现文件的上传和下载功能,保证数据传输的可靠性和完整性;- 远程控制应用设计:设计一个远程控制程序,实现对远程主机的控制和操作;- 网络游戏开发:探索网络游戏的开发过程,了解游戏服务器的搭建和通信协议的设计。
目录一设计任务.........................................2二UDP的理论分析..................................2(一)用户数据报协议UDP..........................21.概念.........................................................22.协议结构.....................................................33.UDP数据包的封装............................................34.标准UDP端口................................................4(二)传输控制协议TCP简介........................5(三)TCP与UDP的比较表.............................6三 UDP的抓包分析.................................7(一)实验环境..................................7(二)实验过程.....................................7四实验总结.......................................10一设计任务在建立的视屏传输的情况下,用wireshark软件对该传输下的UDP协议数据包进行抓取,并作出相应的分析和适当的验证。
二UDP的理论分析视频传输,尤其是即时的视频传输需要的是传输帧的速度,这样才能实现视频的通信。
对于TCP协议来说,因为是可靠传输,这大大限制其传输速率,而且TCP是不丢包的,如果视频数据量大于网络速度,那会在发送端越聚越多最后造成系统崩溃。
课程设计报告设计名称:网络协议编程应用课程设计系(院):机算计科学学院专业班级:网络11003班姓名:王小贱学号: 1指导教师:张为邱机设计时刻:-设计地址:四号楼1楼2号机房一、目的与任务网络协议编程应用课程设计是《TCP/IP协议分析》课程后的一个重要的教学环节,是对学生进行的一次较为全面的网络协议编程方面的训练。
其大体目的是:(1)培育学生理论联系实际的设计思想,训练综合运用所学的基础理论知识,结合生产实际分析和解决网络应用中问题的能力,从而使基础理论知识取得巩固和加深。
(2)通过编程实践学习把握网络协议的运行原理。
(3)练习多线程的网络编程模式,为以后开发真实的应用协议打下基础。
二、大体要求(1)合理设计系统框图和程序结构图。
(2)依照系统框图设计,编写程序代码。
(3)编写程序说明书。
三、实验环境安装有vs2020和虚拟机的运算机四、课程设计内容(1)、熟悉开发工具Visual Studio是微软公司推出的开发环境。
是目前最流行的Windows平台应用程序开发环境。
Visual Studio 2020版本于2020年4月12日上市,其集成开发环境()的界面被从头设计和组织,变得加倍简单明了。
Visual Studio 2020同时带来了 NET Framework 、Microsoft Visual Studio 2020 CTP( Community Technology Preview--CTP),而且支持开发面向Windows 7的应用程序。
除Microsoft SQL Server,它还支持 DB2和Oracle数据库。
学习利用好vs2020关于咱们来讲有专门大意义。
(2)、套接字编程练习利用TCP/IP协议的应用程序通常采纳两种应用编程接口(API):socket和TLI(运输层接)。
前者有时称作"Berkeley socket",说明它是从伯克利版进展而来的。
TCP/IP网络与协议课程设计一、项目背景TCP/IP是计算机网络中最常用的协议,也是构建Internet的核心协议。
了解TCP/IP网络与协议的原理和应用是计算机专业学生必须掌握的基本知识之一。
为了使学生更好的理解TCP/IP网络与协议,本课程特别设计了相关的课程设计项目。
二、项目介绍本项目分为两个模块,分别为TCP/IP网络的原理研究和协议实现。
下面将分别介绍两个模块的详细内容。
2.1 TCP/IP网络的原理研究本模块的主要目的是让学生了解TCP/IP网络的基本原理和其应用,对于该模块,建议学生选择以下主题进行研究:•TCP/IP协议族的体系结构;•IP地址的分类和分配;•ARP协议的运作原理;•ICMP协议的运作原理;•TCP协议的特点和功能;•UDP协议的特点和功能。
学生可以根据个人兴趣进行选择,并在选择后进行深入研究,撰写文档或PPT进行报告。
2.2 协议实现本模块的主要目的是让学生实现一些常见的TCP/IP协议,提高学生对TCP/IP协议的理解和实现能力。
以下是实现的建议:•实现TCP/UDP协议;•实现ARP及IP协议;•实现ICMP协议。
学生可以使用C或Python等编程语言进行协议的实现,并提供代码、文档和测试报告等。
三、项目评分要求本项目所分模块的评分要求如下:3.1 TCP/IP网络的原理研究•完整性(20分):是否涵盖了所有指定的主题;•准确性(30分):所涵盖内容是否准确;•深度(30分):是否对所选主题进行了充分的探究和研究;•报告质量(20分):报告的语言规范、结构是否清晰等方面的要求。
3.2 协议实现•正确性(40分):所实现协议是否正确;•完整性(20分):是否实现了所要求的所有协议;•报告质量(20分):文档、测试报告等的质量;•代码质量(20分):代码规范、注释、开发环境等方面的要求。
四、注意事项•本项目有一定的难度,学生应注意把握时间,提前规划和分配任务;•对于协议实现模块,不鼓励学生通过复制粘贴等方式进行实现,应该通过自己的努力进行实现;•提交报告时,应遵守相关规定,如不得抄袭、剽窃、造假等。
编程实现简单的TCP协议分析器一、问题描述编程实现简单的TCP协议分析器,TCP协议分析器是一种用于监督和跟踪网络活动的诊断工具,它从局域网中抓取IP数据包,并对它进行分析得到相应的头部信息,过滤TCP包进行分析,得到TCP包的相应信息。
二、基本要求1.利用原始套接字实现简单的TCP协议分析器。
2.系统功能包括:2.1 原始套接字与网卡绑定,并接收流经网卡的所有数据包;2.2 对数据包进行分析以获得源IP地址和目的IP地址;2.3 对TCP Segment进行分析以获得其首部详细信息;2.4 显示分析结果。
3 建议使用VC++。
三、设计思想TCP协议的数据传送程序是由二个子程序组成的。
也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦听端口号,接收远程主要的TCP连接申请,并接收远程主机传送来的文字数据。
另外一个子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请。
程序利用原始套接字抓取局域网中的IP包。
TCP协议分析器实现了sniffer的一部分功能。
而sniffer的工作原理是:1. 把网卡置于混杂模式;2. 捕获数据包;3. 分析数据包。
Raw Socket: 原始套接字可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP等。
四、系统结构(1)Pcap_addr描述网络接口地址;(2)pcap_pkthdr用来描述每个捕获到的数据包的基本信息;(3)int_pcaplookupnet获取网络地址和网络掩码;(4)int_pcaploop循环捕获网络数据包,直到遇到错误或满足退出条件;(5)pcap_t* pcap_open_dead构造一个libpcap句柄。
五、程序流程(或模块划分)六、源程序#include "pcap.h"struct ether_header{u_int8_t ether_dhost[6];/* 目的以太网地址*/u_int8_t ether_shost[6];/* 源以太网地址*/u_int16_t ether_type;/* 以太网类型*/};struct arp_header{u_int16_t arp_hardware_type;/* 硬件类型*/u_int16_t arp_protocol_type;/* 协议类型*/u_int8_t arp_hardware_length;/* 硬件地址长度*/u_int8_t arp_protocol_length;/* 协议地址长度*/u_int16_t arp_operation_code;/* 操作码*/u_int8_t arp_source_ethernet_address[6];/* 源以太网地址*/u_int8_t arp_source_ip_address[4];/* 源IP地址*/u_int8_t arp_destination_ethernet_address[6];/* 目的以太网地址*/u_int8_t arp_destination_ip_address[4];/* 目的IP地址*/};struct ip_header{#if defined(WORDS_BIGENDIAN)u_int8_t ip_version: 4,/* 版本*/ip_header_length: 4;/* 首部长度*/#elseu_int8_t ip_header_length: 4, ip_version: 4;#endifu_int8_t ip_tos;/* 服务质量*/u_int16_t ip_length;/* 长度*/u_int16_t ip_id;/* 标识*/u_int16_t ip_off;/* 偏移*/u_int8_t ip_ttl;/* 生存时间*/u_int8_t ip_protocol;/* 协议类型*/u_int16_t ip_checksum;/* 校验和*/struct in_addr ip_souce_address;/* 源IP地址*/struct in_addr ip_destination_address;/* 目的IP地址*/};struct udp_header{u_int16_t udp_source_port;/* 源端口号*/u_int16_t udp_destination_port;/* 目的端口号*/u_int16_t udp_length;/* 长度*/u_int16_t udp_checksum;/* 校验和*/};struct tcp_header{u_int16_t tcp_source_port;/* 源端口号*/u_int16_t tcp_destination_port;/* 目的端口号*/u_int32_t tcp_sequence_liuzhen;/* 序列号*/u_int32_t tcp_acknowledgement;/* 确认序列号*/#ifdef WORDS_BIGENDIANu_int8_t tcp_offset: 4,/* 偏移*/tcp_reserved: 4;/* 未用*/#elseu_int8_t tcp_reserved: 4,/* 未用*/tcp_offset: 4;/* 偏移*/#endifu_int8_t tcp_flags;/* 标记*/u_int16_t tcp_windows;/* 窗口大小*/u_int16_t tcp_checksum;/* 校验和*/u_int16_t tcp_urgent_pointer;/* 紧急指针*/};struct icmp_header{u_int8_t icmp_type;/* ICMP类型*/u_int8_t icmp_code;/* ICMP代码*/u_int16_t icmp_checksum;/* 校验和*/u_int16_t icmp_id;/* 标识符*/u_int16_t icmp_sequence;/* 序列码*/};void tcp_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content){struct tcp_header *tcp_protocol;/* TCP协议变量*/u_char flags;/* 标记*/int header_length;/* 长度*/u_short source_port;/* 源端口*/u_short destination_port;/* 目的端口*/u_short windows;/* 窗口大小*/u_short urgent_pointer;/* 紧急指针*/u_int sequence;/* 序列号*/u_int acknowledgement;/* 确认号*/u_int16_t checksum;/* 校验和*/tcp_protocol = (struct tcp_header*)(packet_content + 14+20);/* 获得TCP协议内容*/source_port = ntohs(tcp_protocol->tcp_source_port);/* 获得源端口*/destination_port = ntohs(tcp_protocol->tcp_destination_port);/* 获得目的端口*/header_length = tcp_protocol->tcp_offset *4;/* 长度*/sequence = ntohl(tcp_protocol->tcp_sequence_liuzhen);/* 序列码*/acknowledgement = ntohl(tcp_protocol->tcp_acknowledgement);/* 确认序列码*/windows = ntohs(tcp_protocol->tcp_windows);/* 窗口大小*/urgent_pointer = ntohs(tcp_protocol->tcp_urgent_pointer);/* 紧急指针*/flags = tcp_protocol->tcp_flags;/* 标识*/checksum = ntohs(tcp_protocol->tcp_checksum);/* 校验和*/printf("------- TCP协议-------\n");printf("源端口号:%d\n", source_port);printf("目的端口号:%d\n", destination_port);switch (destination_port){case 80:printf("上层协议为HTTP协议\n");break;case 21:printf("上层协议为FTP协议\n");break;case 23:printf("上层协议为TELNET协议\n");break;case 25:printf("上层协议为SMTP协议\n");break;case 110:printf("上层协议POP3协议\n");break;default:break;}printf("序列码:%u\n", sequence);printf("确认号:%u\n", acknowledgement);printf("首部长度:%d\n", header_length);printf("保留:%d\n", tcp_protocol->tcp_reserved);printf("标记:");if (flags &0x08)printf("PSH ");if (flags &0x10)printf("ACK ");if (flags &0x02)printf("SYN ");if (flags &0x20)printf("URG ");if (flags &0x01)printf("FIN ");if (flags &0x04)printf("RST ");printf("\n");printf("窗口大小:%d\n", windows);printf("校验和:%d\n", checksum);printf("紧急指针:%d\n", urgent_pointer);}void ip_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content){struct ip_header *ip_protocol;/* IP协议变量*/u_int header_length;/* 长度*/u_int offset;/* 偏移*/u_char tos;/* 服务质量*/u_int16_t checksum;/* 校验和*/ip_protocol = (struct ip_header*)(packet_content + 14);/* 获得IP协议内容*/checksum = ntohs(ip_protocol->ip_checksum);/* 获得校验和*/header_length = ip_protocol->ip_header_length *4;/* 获得长度*/tos = ip_protocol->ip_tos;/* 获得服务质量*/offset = ntohs(ip_protocol->ip_off);/* 获得偏移*/if (ip_protocol->ip_protocol==6){printf("----------- IP协议-----------\n");printf("版本号:%d\n", ip_protocol->ip_version);printf("首部长度:%d\n", header_length);printf("服务质量:%d\n", tos);printf("总长度:%d\n", ntohs(ip_protocol->ip_length));printf("标识:%d\n", ntohs(ip_protocol->ip_id));printf("偏移:%d\n", (offset &0x1fff) *8);printf("生存时间:%d\n", ip_protocol->ip_ttl);printf("协议类型:%d\n", ip_protocol->ip_protocol);printf("上层协议为TCP协议\n");printf("校验和:%d\n", checksum);printf("源IP地址:%s\n", inet_ntoa(ip_protocol->ip_souce_address));/* 获得源IP地址*/printf("目的IP地址:%s\n", inet_ntoa(ip_protocol->ip_destination_address));/* 获得目的IP地址*/}}void ethernet_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content){static int packet_number = 1;/* 数据包个数,静态变量*/u_short ethernet_type;/* 以太网类型*/struct ether_header *ethernet_protocol;struct ip_header *ip_protocol;/* IP协议变量*/u_int header_length;/* 长度*/u_int offset;/* 偏移*/u_char tos;/* 服务质量*/u_int16_t checksum;/* 校验和*/ip_protocol = (struct ip_header*)(packet_content + 14);/* 获得IP协议内容*/checksum = ntohs(ip_protocol->ip_checksum);/* 获得校验和*/header_length = ip_protocol->ip_header_length *4;/* 获得长度*/tos = ip_protocol->ip_tos;/* 获得服务质量*/offset = ntohs(ip_protocol->ip_off);/* 获得偏移*//* 以太网协议变量*/ethernet_protocol = (struct ether_header*)packet_content;ethernet_type = ntohs(ethernet_protocol->ether_type);/* 获得以太网类型*/if(ethernet_type==0x0800 && ip_protocol->ip_protocol==6){u_char *mac_string;/* 以太网地址*/printf("**************************************************\n");printf("捕获第%d个TCP网络数据包\n", packet_number);printf("捕获时间:\n");printf("%s", ctime((const time_t*) &packet_header->_sec));/* 获得捕获数据包的时间*/printf("数据包长度:\n");printf("%d\n", packet_header->len);printf("-------- 以太网协议--------\n");/* 获得以太网协议内容*/printf("类型:\n");printf("%04x\n", ethernet_type);printf("源以太网地址: \n");mac_string = ethernet_protocol->ether_shost;printf("%02x:%02x:%02x:%02x:%02x:%02x\n", *mac_string, *(mac_string + 1), *(mac_string + 2), *(mac_string + 3), *(mac_string + 4), *(mac_string + 5));/* 获得源以太网地址*/printf("目的以太网地址: \n");mac_string = ethernet_protocol->ether_dhost;printf("%02x:%02x:%02x:%02x:%02x:%02x\n", *mac_string, *(mac_string + 1), *(mac_string + 2), *(mac_string + 3), *(mac_string + 4), *(mac_string + 5));/* 获得目的以太网地址*/ip_protocol_packet_callback(argument, packet_header, packet_content);packet_number++;printf("**************************************************\n");}}void main(){pcap_t *pcap_handle;/* Winpcap句柄*/char error_content[PCAP_ERRBUF_SIZE];/* 存储错误信息*/char *net_interface;/* 网络接口*/struct bpf_program bpf_filter;/* BPF过滤规则*/char bpf_filter_string[] = "";/* 过滤规则字符串*/bpf_u_int32 net_mask;/* 掩码*/bpf_u_int32 net_ip;/* 网路地址*/net_interface = pcap_lookupdev(error_content);/* 获得可用的网络接口*/pcap_lookupnet(net_interface, &net_ip, &net_mask, error_content);/* 获得网络地址和掩码地址*/pcap_handle = pcap_open_live(net_interface, BUFSIZ, 1, 1, error_content);/* 打开网路接口*/pcap_compile(pcap_handle, &bpf_filter, bpf_filter_string, 0, net_ip);/* 编译BPF过滤规则*/pcap_setfilter(pcap_handle, &bpf_filter);/* 设置过滤规则*/if (pcap_datalink(pcap_handle) != DLT_EN10MB)return ;pcap_loop(pcap_handle, - 1, ethernet_protocol_packet_callback, NULL);/* 注册回调函数,循环捕获网络数据包,利用回调函数来处理每个数据包*/ pcap_close(pcap_handle);/* 关闭Winpcap操作*/}七、测试数据本地局域网IP数据包八、测试情况程序运行结果图:结论通过两周的课程设计,增强了我的实际动手能力,通过实际的编程整合串联了我所学到的知识。
《网络协议与编程技术》课程教学大纲一、课程基本信息二、课程教学目标本课程旨在培养网络工程专业学生的网络程序设计能力,使学生在掌握网络协议和网络编程基础知识的基础上,进一步提高学生使用计算机的能力。
通过本课程的学习,使学生系统地掌握TCP/IP协议的结构和工作过程,深入地理解并掌握协议的报文格式、工作机制和工作原理,掌握网络应用程序的基本框架、工作模型、编程接口和套接口等网络程序设计的基本知识,使学生具备网络编程的基本技能和进行网络应用程序开发的基本能力,为以后更好应用计算机网络、开发计算机网络应用系统打下坚实的基础。
三、教学学时分配《网络协议与编程技术》课程理论教学学时分配表《网络协议与编程技术》课程实验内容设置与教学要求一览表四、教学内容和教学要求第一章 Internet与TCP/IP协议(2学时)(一)教学要求通过本章内容的学习,了解Internet与TCP/IP协议的起源、网络标准化组织与机构、标准化过程和RFC文档,理解网络协议、网络体系结构的概念,掌握OSI参考模型、TCP/IP 网络模型、TCP/IP协议的通信模型等。
(二)教学重点与难点教学重点:TCP/IP网络模型、TCP/IP协议的通信模型。
教学难点:数据的封装与传递过程(三)教学内容第一节OSI参考模型和TCP/IP网络模型1.OSI参考模型2.TCP/IP网络模型第二节TCP/IP协议的体系结构1.网络体系结构的概念2.TCP/IP协议的四个层次3.TCP/IP协议中的OS边界和地址边界第三节TCP/IP协议的工作过程1.TCP/IP协议的通信模型2.数据的封装与传递过程本章习题要点:1.OSI参考模型各层作用和工作原理;2.TCP/IP协议的通信模型的工作原理;3.数据通信时数据的封装与传递的过程。
第二章 IP协议(4学时)(一)教学要求通过本章内容的学习,了解网络互联方式、IP协议的地位与IP互联网的特点,理解IP 互联网原理和路由的概念,IP地址的结构、格式、分类、子网与子网掩码,掌握IP数据报格式、选项、各字段的功能、分片与重组,ICMP报文的封装与格式,地址解析协议与反向地址解析协议的工作原理及格式,常用的路由选择算法、路由表的建立与刷新及路由选择协议等。
计算机网络课程设计题目一-------解析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给出—·个供参考的程序流程图。