




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄聿芄莃薃膂葿蚁薃袁节薇蚂羄蒇蒃蚁肆芀荿蚀芈肃螈虿羈莈蚄蚈肀膁薀蚇膃莇蒆蚇袂膀莂蚆羅莅蚁螅肇膈薆螄腿莃蒂螃衿膆蒈螂肁蒂莄螁膄芄蚃螁袃蒀蕿螀羅芃蒅蝿肈蒈莁袈膀芁蚀袇袀肄薆袆羂艿薂袅膄肂蒈袅袄莈莄袄羆膀蚂袃聿莆薈袂膁腿蒄羁袁莄莀羀羃膇虿罿膅莂蚅罿芈芅薁羈羇蒁蒇薄 课程设计(论文)任务书 信息工程 学院 计算机应用 专业计算机2010-1 班一、课程设计(论文)题目计算机网络课程设计 二、课程设计(论文)工作自 2012 年 6 月 18 日起至 2012 年 6 月 22 日止。三、课程设计(论文) 地点: 创新大楼405有线网络实验室。 四、课程设计(论文)内容要求:1本课程设计的目的通过课程设计,使学生理论联系实际,在实践中进一步了解计算机网络体系结构,深入理解tcp/ip参考模型,掌握各种网络工程技术和网络规划与设计,初步掌握综合布线技术、高速局域网技术、广域网接入技术、网络互联技术,初步掌握网络应用程序开发技术以及互联网的应用技术。培养学生分析、解决问题的能力,提高学生的科技论文写作能力。2课程设计的任务及要求1)基本要求:(1)熟悉交换机、路由器等网络设备的功能和使用;(2)掌握网络规划与设计,掌握网络安全与管理技术;(3)初步掌握网络应用程序设计技术和互联网应用技术。2)课程设计论文编写要求 (1)理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订。 (2)课程设计报告(论文)包括目录、绪论、正文、设计小结、参考文献、附录等3)课程设计评分标准: (1)考勤与学习态度:20分 (2)理论理解与课程设计报告论文:40分; (3)动手操作与实验设计:20分; (4)设计论文答辩:20分。4)参考文献: (1)计算机网络(第5版),谢希仁主编,电子工业出版社出版 (2)windows网络编程技术,胡鸣主编,科学出版社出版 (3)网上百度5)课程设计进度安排内容 天数 地点1 选择设计题目、了解设计目的要求、查阅相关理论资料 1天 图书馆、机房2 设计方案选型及实验室完成相关的设计任务 2天 实验室 3总结课程设计任务和设计步骤,撰写课程设计论文 2天 图书馆、机房、实验室 学生签名: 2012 年6月18日6) 选择课程设计题目具体要求: 用winsock设计ping应用程序 具体要求: 理解winsock技术网络编程技术,分析ping应用程序设计原理和程序流程,选择合适的开发环境,参考已有的ping程序功能,设计实现ping功能的应用程序。设计论文要求:1) 分析winsock编程技术;2) 分析ping程序的功能及其相关网络协议;3) 给出ping程序流程图和设计方案;4) 选择开发环境,编译源程序;5) 给出软件测试文档;6) 设计小结;参考文献(包括互联网上的引用信息)。课程设计(论文)评审意见(1)考勤与学习态度(20分):优()、良()、中()、一般()、差(); (2)理论理解与课程设计报告论文(40分):优()、良()、中()、一般()、差(); (3)动手操作与实验设计(20分):优()、良()、中()、一般()、差();(4)设计论文答辩(20分):优()、良()、中()、一般()、差();(5)格式规范性及考勤是否降等级:是()、否() 评阅人: 职称: 讲 师 2012 年6 月24 日 目录1、 目的和意义以及发展现状和趋势.12、 课程设计具体要求.23、 winsock编程技术.34、 ping程序的功能及其相关网络协议.65、 ping程序流程图和设计方案.76、 开发环境.97、 源程序.108、 软件测试.229、 总结与心得.2410、 参考文献.25 一、目的和意义以及发展现状和趋势 目的: 通过课程设计,使学生理论联系实际,在实践中进一步了解计算机网络体系结构,深入理解,tcp/ip参考模型,掌握各种网络工程技术和网络规划与设计,初步掌握综合布线技术、高速局域网技术、广域网接入技术、网络互联技术,初步掌握网络应用程序开发技术以及互联网的应用技术。培养学生分析、解决问题的能力,提高学生的科技论文写作能力。意义:在进行本课程设计题目后,能初步掌握ping程序的设计原理及实现过程,了解网络的连通性概念,了解winsock网络编程的概念并能实现简单的网络应用程序设计与实现。发展现状和趋势:ping命令是用来检查网络是否能够连通,用它可以很好地帮助我们分析判定网络故障,并且是windows等系统自带的程序,大多数上网用户都会使用该功能,其发展现状良好,是目前使用特别多的一个工具,估计这也将成为未来的发展的趋势。 1 二、课程设计具体要求用winsock设计ping应用程序具体要求:理解winsock技术网络编程技术,分析ping应用程序设计原理和程序流程,选择合适的开发环境,参考已有的ping程序功能,设计实现ping功能的应用程序。设计论文要求:7) 分析winsock编程技术;8) 分析ping程序的功能及其相关网络协议;9) 给出ping程序流程图和设计方案;10) 选择开发环境,编译源程序;11) 给出软件测试文档;12) 设计小结;参考文献(包括互联网上的引用信息)。 2 三、winsock编程技术 使用winsock api的编程,应该了解tcp/ip的基础知识。虽然你可以直接使用winsock api来写网络应用程序,但是,要写出优秀的网络应用程序,还是必须对tcp/ip协议有一些了解的。1. tcp/ip协议与winsock网络编程接口的关系 winsock 并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议,但是它可以访问很多种网络协议,你可以把他当作一些协议的封装。现在的 winsock已经基本上实现了与协议无关。你可以使用winsock来调用多种协议的功能。那么,winsock和tcp/ip协议到底是什么关系呢?实际上,winsock就是tcp/ip协议的一种封装,你可以通过调用winsock的接口函数来调用tcp/ip的各种功能.例如我想用tcp/ip 协议发送数据,你就可以使用winsock的接口函数send()来调用tcp/ip的发送数据功能,至于具体怎么发送数据,winsock已经帮你封装好了这种功能。2、tcp/ip协议介绍 tcp/ip协议包含的范围非常的广,他是一种四层协议,包含了各种硬件、软件需求的定义。 tcp/ip协议确切的说法应该是tcp/udp/ip协议。udp协议(user datagram protocol 用户数据报协议),是一种保护消息边界的,不保障可靠数据的传输。tcp协议(transmission control protocol 传输控制协议),是一种流传输的协议。他提供可靠的、有序的、双向的、面向连接的传输。保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。也就是说存在保护消息边界,接收端一次只能接收发送端发出的一个数据包。而面向流则是指无保护消息保护边界的,如果发送端连续发送数据,接收端有可能在一次接收动作中,会接收两个或者更多的数据包。3winsock编程简单流程 winsock编程分为服务器端和客户端两部分,tcp服务器端的大体流程如下:对于任何基于winsock的编程首先必须要初始化winsock dll库。int wsastarup( word wversionrequested,lpwsadata lpwsadata )。wversionrequested是我们要求使用的winsock的版本。调用这个接口函数可以初始化winsock 。然后必须创建一个套接字(socket)。socket socket(int af,int type,int protocol);套接字可以说是winsock通讯的核心。winsock通讯的所有数据传输,都是通过 3套接字来完成的,套接字包含了两个信息,一个是ip地址,一个是port端口号,使用这两个信息,就可以确定网络中的任何一个通讯节点。当调用了socket()接口函数创建了一个套接字后,必须把套接字与你需要进行通讯的地址建立联系,可以通过绑定函数来实现int bind(socket s,const struct sockaddr far* name,int namelen) ; struct sockaddr_inshort sin_family ;u_short sin_prot ;struct in_addr sin_addr ;char sin_sero8 ;就包含了需要建立连接的本地的地址,包括地址族、ip和端口信息。sin_family字段必须把它设为af_inet,这是告诉winsock使用的是ip地址族。sin_prot就是要用来通讯的端口号。sin_addr就是要用来通讯的ip地址信息。winsock api提供了几个函数。把主机字节转化成网络字节的函数;u_long htonl(u_long hostlong);u_short htons(u_short hostshort);把网络字节转化成主机字节的函数;u_long ntohl(u_long netlong);u_short ntohs(u_short netshort) ;这样,设置ip地址和port端口时,就必须把主机字节转化成网络字节后,才能用bind()函数来绑定套接字和地址。当绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。int listen(socket s,int backlog);这个函数可以把套接字转成监听模式。如果客户端有了连接请求,我们还必须使用int accept(socket s,struct sockaddr far* addr,int far* addrlen);来接受客户端的请求。现在基本上已经完成了一个服务器的建立,而客户端的建立的流程则是初始化winsock,然后创建socket套接字,再使用int connect(socket s,const struct sockaddr far* name,int namelen) ;来连接服务端。4winsock编程的模型 4 上面介绍的仅仅是最简单的winsock通讯的方法,而实际中很多网络通讯的却很多难以解决的意外情况。例如,winsock提供了两种套接字模式:锁定和非锁定。当使用锁定套接字的时候,使用的很多函数,例如accpet、send、recv等等,如果没有数据需要处理,这些函数都不会返回,也就是说,你的应用程序会阻塞在那些函数的调用处。而如果使用非阻塞模式,调用这些函数,不管你有没有数据到达,他都会返回。所以有可能我们在非阻塞模式里,调用这些函数大部分的情况下会返回失败,所以就需要我们来处理很多的意外出错。这显然不是我们想要看到的情况。我们可以采用winsock的通讯模型来避免这些情况的发生。winsock提供了五种套接字i/o模型来解决这些问题。他们分别是select(选择),wsaasyncselect(异步选择),wsaeventselect (事件选择,overlapped(重叠) , completion port(完成端口) 。这里详细介绍一下select,wsaasyncselect两种模型。select模型是最常见的i/o模型。使用int select( int nfds , fd_set far* readfds , fd_set far* writefds,fd_set far* exceptfds,const struct timeval far * timeout ) ;函数来检查你要调用的socket套接字是否已经有了需要处理的数据。select包含三个socket队列,分别代表:readfds ,检查可读性,writefds,检查可写性,exceptfds,例外数据。timeout是select函数的返回时间。wsaasyncselect(异步选择)模型:wsaasyncselect模型就是把一个窗口和套接字句柄建立起连接,套接字的网络事件发生时时候,就会把某个消息发送到窗口,然后可以在窗口的消息响应函数中处理数据的接收和发送。int wsaasyncselect( socket s, hwnd hwnd , unsigned int wmsg , long levent ) ;这个函数可以把套接字句柄和窗口建立起连接,wmsg 是我们必须自定义的一个消息。 5 四、ping程序的功能及其相关网络协议1、ping程序功能 它主要的功能是用来检测网络的连通情况和分析网络速度。ping程序通过主机向远程计算机发出icmp回显请求,远程计算机拦截这个请求,然后生成一条回显应答消息,通过网络传给主机。但是如果因为一些原因造成不能抵达目标主机,就会生成对应的icmp错误消息,由原来打算建立通信的那个路径上某处的一个路由器返回。如果与远程主机的物理性连接并不存在问题,但是远程主机已经关机或没有设置对网络时间的做出相应,便需由自己的程序来执行超时检测,侦测出这样的情况。以检查网络是否能够连通,从而可以很好地帮助我们分析判定网络故障。它所利用的原理:网络上的机器都有唯一确定的ip地址,按照缺省设置,windows上运行的ping命令给目标ip地址发送4个icmp(网间控制报文协议)回送请求,每个32字节数据,如果一切正常,应能得到4个回送应答。根据返回的数据包我们可以确定目标主机的存在以及是否可达。在本程序中,可以通过两种方式测试目标主机的连通性:通过ip地址或者主机名。前者较简单,若通过主机名测试连通性的话,首先要通过数据库中的地址主机名表查询并解析其对应的ip地址,然后进一步测试连通性。如果可以正常连通,则按照先后的顺序返回4个应答帧,显示所用的时间,并且提示完成ping测试。如果不能正常连通,则显示unknow host+地址,并提示测试完成。2、ping的协议支持ping的协议中icmp是最关键的一个。icmp全称internet control message protocol(网际控制信息协议)。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,ip层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于ip数据报的网络体系中,网关必须自己处理数据报的传输工作,而ip协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,tcp/ip设计了icmp协议,当某个网关发现传输错误时,立即向信源主机发送icmp报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。 icmp报文包含在ip数据报中,属于ip的一个用户,ip头部就在icmp报文的前面,所以一个icmp报文包括ip头部、icmp头部和icmp报文,ip头部的protocol值为1就说明这是一个icmp报文,icmp头部中的类型(type)域用于说明icmp报文的作用及格式,此外还有一个代码(code)域用于详细说明某种icmp报文的类型,所有数据都在icmp头部后面。 常见的icmp报文主要有:响应请求目标不可到达、源抑制和超时报文,以及时间戳。 6 五、 ping程序流程图和设计方案1、ping请求程序流程图2、ping回应程序流程图 7 3、接收数据包流程图 8 六、 开发环境1、c语言简介c语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的d.m.ritchie于1972年推出。1978后,c语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到c语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。2、c语言特点 c是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。c 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 c是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。c 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 c语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。 c语言适用范围大。适合于多种操作系统,如windows、dos、unix等等;也适用于多种机型。 c语言对编写需要硬件进行操作的场合,明显优于其它高级语言,有一些大型应用软件也是用c语言编写的。 9 七、源程序/*ping源文件*/#pragma comment( lib, ws2_32.lib )#include #include #include #include #include #define ip_record_route 0x7#define def_packet_size 32 #define max_packet 1024 #define max_ip_hdr_size 60 #define icmp_echo 8#define icmp_echoreply 0#define icmp_min 8void initping();void userhelp();void getargments(int argc, char* argv); ushort checksum(ushort *buffer, int size);void fillicmpdata(char *icmp_data, int datasize);void freeres();void decodeipoptions(char *buf, int bytes);void decodeicmpheader(char *buf, int bytes, sockaddr_in* from);void pingtest(int timeout);typedef struct _iphdr /定义ip报头结构体 10unsigned int h_len:4; /*表示ip报头长度,首部长度指的是首部占32bit字的数目,包括任何选项。由于它是一个4bit 字段,因此首部最长为60个字节,不包括任何选项的ip报头是20个字节。*/ unsigned int version:4; / 表示ip的版本号,这里表示ipv4 unsigned char tos; /*表示服务的类型,可以表示最小时延,最大吞吐量,最高可靠性和最小费用。*/ unsigned short total_len; /整个ip数据报的总长度 unsigned short ident; /唯一的标识符,标识主机发送的每一份数据报 unsigned short frag_flags; /分段标志,表示过长的数据报是否要分段 unsigned char ttl; /生存期,表示数据报可以经过的最多路由器数 unsigned char proto; /协议类型(tcp、udp等) unsigned short checksum; /校验和 unsigned int sourceip; /源ip地址 unsigned int destip; /目的ip地址 ipheader;typedef struct _icmphdr /定义icmp报文结构体 byte i_type; /icmp报文类型 byte i_code; / 该类型中的代码号,一种icmp 报文的类型号和该类型中的代码号共同决定 ushort i_cksum; / 校验和 ushort i_id; ushort i_seq; / 序列号,序列号从0开始,每发送一次新的回显请求就加1 ulong timestamp; / 时间 icmpheader;typedef struct _ipoptionhdr /定义ip选项结构体 unsigned char code; / 指明ip 选项类型,对于路由记录选项,它的值是7 unsigned char len; / 选项头长度 unsigned char ptr; / 地址指针字段,是一个基于1的指针,指向存放下一个ip地址的位置 unsigned long addr9; /记录的ip地址列表,由于ip首部中选项的空间有限,所以可以记录的ip地址最多是9个 ipoptionheader;socket m_socket; 11ipoptionheader ipoption;sockaddr_in destaddr;sockaddr_in sourceaddr;char *icmp_data;char *recvbuf;ushort seq_no ;char *lpdest;int datasize;bool recordflag;double packetnum;bool sucessflag;void initping() /初始化ping 所需的全局变量,为各个变量赋初始值 wsadata wsadata; icmp_data = null; seq_no = 0; recvbuf = null; recordflag = false; lpdest = null; datasize = def_packet_size; packetnum = 5; sucessflag = false; if (wsastartup(makeword(2, 2), &wsadata) != 0) printf(wsastartup() failed: %dn, getlasterror(); return ; m_socket = invalid_socket;void userhelp() /显示用户帮助信息printf(请到cmd命令提示符上操作!n); 12printf(userhelp: ping -r data sizen); printf( -r record routen); printf( -n record amountn); printf( host remote machine to pingn); printf( datasize can be up to 1kbn); exitprocess(-1); void getargments(int argc,char* argv) /获取用户提交的参数 int i; int j; int exp; int len; int m; if(argc = 1) printf(nplease specify the destination ip address and the ping option as follow!n); userhelp(); for(i = 1; i =1;j-,exp+) packetnum += (double)(argvij-48)*pow(10,exp); else switch (tolower(argvi1) case r: recordflag = true; break; default: userhelp(); 13break; else if (isdigit(argvi0) for(m=1;m 1) cksum += *buffer+; size -= sizeof(ushort); if (size) cksum += *(uchar*)buffer; cksum = (cksum 16) + (cksum & 0xffff); cksum += (cksum 16); return (ushort)(cksum); 14void fillicmpdata(char *icmp_data, int datasize) /填充icmp数据报中各个字段 icmpheader *icmp_hdr = null; char *datapart = null; icmp_hdr = (icmpheader*)icmp_data; icmp_hdr-i_type = icmp_echo; icmp_hdr-i_code = 0; icmp_hdr-i_id = (ushort)getcurrentprocessid(); icmp_hdr-i_cksum = 0; icmp_hdr-i_seq = 0; datapart = icmp_data + sizeof(icmpheader); memset(datapart,0,datasize-sizeof(icmpheader);void freeres() /释放占用的资源,包括关闭初始化socket 调用的函数的、关闭创建的socket和释放分配的内存等。 if (m_socket != invalid_socket) closesocket(m_socket); heapfree(getprocessheap(), 0, recvbuf); heapfree(getprocessheap(), 0, icmp_data); wsacleanup(); return ;void decodeipoptions(char *buf, int bytes) /解读ip选项,从中读出从源主机到目的主机经过的路由,并输出路由信息 ipoptionheader *ipopt = null; in_addr inaddr; int i; 15 hostent *host = null; ipopt = (ipoptionheader *)(buf + 20); printf(rr: ); for(i = 0; i ptr / 4) - 1; i+) inaddr.s_u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东育婴师试题及答案
- 企业管理规定试题及答案
- 2024年纺织设计师行业调查试题及答案
- 广告设计师考试色彩心理研究试题及答案
- 广告设计与内容营销试题及答案
- 2024年与设计相关的行业动态国际商业美术设计师考试试题及答案
- 买豆浆的孩子试题及答案
- 2024年广告设计师的复习新方法试题及答案
- 广告设计中的转化率提升策略试题及答案
- 科学编制考试试题及答案
- 基于深度学习的语音分离技术研究
- 拆井施工方案
- 【中小企业财务管理存在的问题及对策分析-以A公司为例5100字(论文)】
- -2月班主任随堂听课记录表
- 《虚拟现实(VR)制作与应用》考试复习题库(汇总)
- 解剖学下肢肌课件
- NB/T 11141-2023煤矿用氮气降温装置
- 2023年山东省烟台市中考历史真题卷(含答案与解析)
- 国开2023春《语言学概论》形考任务1-3+大作业参考答案
- 第七章第四节+俄罗斯第二课时课件人教版七年级地理下册
- 大学生国家安全教育智慧树知到答案章节测试2023年广西科技大学
评论
0/150
提交评论