




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.论文(设计)题目 ICMP协议及应用研究 The ICMP Protocol and ItsApplication Study 作 者 张 李 华 二级学院、专业 信息工程学院 计算机科学技术 班 级 计001 指导教师(职称) 詹国华(教授) 论 文 字 数 10202 论文完成时间 2008年5月 教务处制目 录摘要3Abstract4第一章 引言5第二章 基于IPv4的ICMP的认识52.1 OSI参考模型和TCP/IP参考模型的比较 52.2 TCP/IP在网络中的地位和作用62.3 ICMP的介绍72.3.1 ICMP协议报头72.3.2 ICMP协议的消息82.3.3 ping命令82.3.4路由跟踪traceroute82.4 ICMP攻击影响网络安全8第三章ICMP部分功能的模拟实现103.1背景103.1.1 ping命令的深入认识103.2存在的问题123.3 CPing的功能特点133.3.1网络的连通133.3.2可视化界面133.3.3 显示简单,对一般用户容易看懂133.3.4 容量小,易携带133.4模拟环境143.5.1硬件环境143.5.2软件环境143.5实现143.5.1 文件组成143.5.2 网络套接字163.6操作过程及结果的显示16第四章ICMP的发展趋势(基于Ipv6的ICMP)18参考文献19摘要本文较深入地研究了TCP/IP协议组中的ICMP协议。ICMP是“Internet Control Message Protocol”(Internet控制报文协议)的缩写,是一个非常重要的协议。ICMP是一种与IP协议并行运行在网络层的协议,用于在IP主机、路由器之间传递控制消息。控制消息包含网络通不通、主机是否可达、路由是否可用等网络本身的消息。本文还深入研究了在常用操作系统下(如UNIX,Windows,DOS)利用ICMP协议实现的ping命令,它是用来测试网络是否通畅,主机是否可达,以及用Visual C+制作模拟ping命令的小软件PingDemo,它虽小,但是简便,面向一般用户。关键词:ICMP,TCP/IP,pingAbstractThe paper searches the ICMP protocol in TCP/IP deeply.ICMP is Internet Control Message Protocol,which plays a very important role. ICMP that works in the same degree as IP protocol,is used to pass the control message between ip-host and rounters.The control message tells you that is the net linked,has the host been arrived,or is the rounter working and so on.In addition,the paper also searches the ping command in the common OS with ICMP.The ping command is to check that the host exists or not.And more,using Visual C+ to make a soft called PingDemo as similar as ping.It faces to everyone though it is small. Keywords: ICMP,TCP/IP,ping第一章 引言随着科学技术的飞速发展,21世纪的地球人已经生活在信息时代。20世纪人类两大科学技术成果-计算机技术和网络技术,均已深入到人类社会的各个领域,Internet把“地球村”的居民紧密联系在一起,“天涯若比邻”已然成为现实。互联网之所以能这样迅速蔓延,被世人接受,是因为它具备特有的信息资源。近年来Internet的迅速发展,给人们的日常生活带来了全新的感受,“网络生存”已经成为时尚,同时人类社会诸如政治、科研、经济、军事等各种活动对信息网络的依赖程度已经越来越强,“网络经济”时代已初露端倪。ping命令早已是耳熟能详的检查网络畅通的得力方法之一,但是ping命令是来自于哪个网络层次的哪个协议,就不是每个人能说得上的了。同样,对于TCP/IP协议我们一定非常熟悉,但是对于ICMP协议可能就一无所知了。ICMP协议是一个非常重要的协议,它对于网络安全、网络的正常运作具有极其重要的意义。它被用于在IP主机、路由器之间传递控制消息,如网络通不通、主机是否可达、路由是否可用等。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。而且,ICMP协议本身的特点又决定了它非常容易被用于攻击网络上的路由器和主机,造成CPU疲于奔命,系统瘫痪,主机死机。以上所言,ICMP的研究将会带领我们进入一个丰富多彩的未知领域。 第二章 基于IPV4的ICMP的认识2.1 OSI参考模型和TCP/IP参考模型的比较 尽管OSI模型在各种场合得到了广泛的应用,但由于其建立时间过早,各种网络的发展不断突破了OSI参考模型,特别是互联网的发展,对OSI模型是一个巨大的挑战。OSI参考模型的教训是:首先,引入时间过晚,建立标准时TCP/IP已在大学使用,而后来又被广泛使用;其次,在技术上不能完全适应网络发展现状,如会话层在大多数应用中很少使用,表述层几乎是空的。相反数据链路层和网络层内容过多,有时不得不分成子层,每一子层赋予不同的功能。OSI的另一个问题是有些功能在不同的层一再出现,如编址、流量控制、纠错等等。有些功能放在那里很难达成一致意见,如安全性、加密及网络管理层很难达成一致而干脆未包括在内。同时OSI完全忽略了无连接业务的相应的协议,而这在LAN和演播室局域网中得到了广泛的应用,只是后来才加以补充。另一个严重问题是OSI主要考虑通信,而计算机世界有相当多的不同点。最后在OSI的实现和政策上都有一些问题。 我们再来看一下TCP/IP参考模型,如图1。图1 OSI参考模型和TCP/IP参考模型可以看到,其中不存在会晤层和表述层,主要面向连接的网络层也被以包交接为基础的无连接互联网络层代替,称为互联网层,数据链路层和物理层也大大简化为主机到网络层(Host-To-Network),除了指出主机必须使用能发送IP包的协议外并不规定什么。在互联网层中定义了包结构和相应的协议,称为互联网协议(IP:Internet Protocol),主要作用是将IP包送到相应的地址。TCP/IP传送层的作用类似于OSI传送层的作用,是使源和目标设备相互对话。TCP/IP定义了两种端到端协议,第一种是传输控制协议(TCP:Transmission Control Protocol),是可靠的面向连接的协议,能确保拜特流无误码从源设备传送到互联网中的其他设备。它将输入拜特流分割成较小的信息并将其每一个都放入互联网层,在接收端,接收TCP重组所接收的信息还原成原拜特流。TCP还进行流量控制,确保较高速的发送端不会使较低速的接收设备过载。第二种协议是用户数据报协议(UDP:User Datagram Protocol),是一个非确保的无连接协议,用于那些不需要TCP顺序和流量控制的应用,广泛用于单项数据传输、服务器用户类型的应答应用。在这些应用中,即时传送比精确传送更重要,典型的应用就是语言和视频传输。 2.2 TCP/IP在网络中的地位和作用 TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:应用层、传输层、互连网络层、网络接口层。 网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层-TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。 2.3 ICMP的介绍ICMP是“Internet Control Message Protocol”(Internet控制报文协议)的缩写,是一个非常重要的协议,它对于网络安全具有极其重要的意义。ICMP消息是随IP数据包一起传输的,但该消息本身也是一种与IP协议并行运行在网络层的协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。我们在网络中经常会使用到ICMP协议,只不过我们觉察不到而已。比如我们经常使用的用于检查网络通不通的Ping命令,这个“ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。2.3.1 ICMP协议报头ICMP消息使用了一种简单的数据结构,其报头部分由三个字段组成,作为报头第一项的类型(type)字段占用了一个字节,用来表示该协议消息所实现的功能,而占用一个字节长度的代码(code)字段则用来进一步对消息内容进行分类。IP 报头类型代码校验和(至少字节)(字节)(字节)(字节)ICMP消息内容(长度和格式不定)ICMP协议报头最后一项是两个字节长度的校验和,而其后的ICMP消息内容则与消息功能有关,但所有消息内容中都必须带有引发错误消息和数据报的IP报头和前个字节,而且这些信息足以使其上层协议对自己的报头进行检查并根据ICMP消息内容来执行适当的操作。最重要的是,ICMP协议不支持数据纠错功能,该协议只是通过向数据源回送错误消息来告诉路由错误。类型 代码 名称 含义 0 * Echo replay 对ping的回应 3 * Destination Unreachable 主机或路由器返回信息:一些包未达到目的地 0 Net Unreachable 路由器配置错误或错误指定IP地址 1 Host Unreachable 最后一个路由器无法与主机进行ARP通讯 4 * Source Quench Internet 阻塞 5 * Redirect 有人试图重定向你的默认路由器,可能Hacker试图你 进行“man-in-middle”的攻击,使你的机器通过他们的机器路由。 8 * Echo Request ping 9 * Router Advertisement hacker可能通过重定向你的默认的路由器DoS攻击你的Win9x 或Solaris。邻近的Hacker也可以发动man-in-the-middle的攻击 11 * Time Exceeded In Transit 因为超时包未达到目的地 12 * Parameter Problem 发生某种不正常,可能遇到了攻击2.3.2 ICMP协议的消息为了提前预防协议可能引发的问题,ICMP协议技术规范中事先对消息进行了若干限制。比如说,规定一个ICMP错误消息不能引发另一个ICMP错误消息。1) 路由消息ICMP路由消息大多用于请求得到可使用的路由器的清单或对请求的应答,应答中包括可用路由器的清单(清单中的每个路由都有优先级别)。一类路由是在路由器过载情况下产生的。如果一个主机向路由器发送过量数据,或者多个主机同时向路由器发送大量数据,都可以导致路由器瘫痪。但是,这时,路由器可以向发送方回送请求减速消息。每当路由器无法对接收的数据报进行处理时,路由器就把该数据报丢弃并同时回送给数据源一个减速消息,请求高速传输主机降低发送速率。收到减速消息的源主机将逐步降低速率直到错误消息消失为止,然后再逐步提高发送速率直到错误消息出现为止。另一类情况是发生在向一个录由器发送数据报时另一个路由器可借助ICMP消息广播一个更好的路由。称为路由重新定向。2) 无法到达消息ICMP无法到达的消息表示在对数据报进行寻址过程中寻址失败而引发的错误信息。举个简单的例子,目标地址有误的数据报可以引发ICMP协议将无法到达的消息回送给该数据报的原始发送主机。该消息一般用来指出目标主机或网络不存在或没有应答。引发该类错误消息的主要原因包括主机处于关机状态,网络链路故障,以及无法使用特定的协议等。2.3.3 ping命令ICMP协议提供的网络工具之一就是网络管理员最常使用的ping命令。ping命令可以把一个ICMP回显请求发送给一个指定的主机,接收该命令的主机通过回送一个ICMP回显应答来对收到的ICMP回显请求进行应答。ping命令的目的是测试主机是否存在。其实, ping命令是测试网络中两个主机是否可以实现最低级别的连通性。2.3.4 路由跟踪traceroute路由跟踪程序traceroute借助于ICMP TTL超时消息来巧妙地收集客户端与服务器之间的路右信息。该程序可输出所有参与转发数据包的路由器的名称以及消息从主机到该路由器的往返传输时间。网络管理员可借助该工具来对响应速度较慢的连接进行诊断,通过观察数据包从一个主机到另一个主机的传输路径有助于帮助管理员确定网络瓶颈的具体位置(也就是应答速度最慢的路由器)或不合理的传输路径。与ping命令类似,虽然路由跟踪程序不能为网络管理提供全面解决方案,但该工具作为诊断工具来说还是非常有用的。2.4 利用ICMP恶意攻击影响网络安全当今世界上,平均每20秒钟就有一起黑客事件发生,仅在美国每年造成的经济损失就超过100亿美圆。ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。服务拒绝攻击(DoS)企图通过使服务计算机崩溃或把它压跨来阻止提供服务,服务拒绝攻击是最容易实施的攻击行为。由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区,当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方当机。这就是所说的“pingofdeath”,现在网络上很多号称能够致使系统死机的软件都是基于这个原理,我们所熟悉的工具“Winnuke”就是一例。对路由器而言,向IntelExpressSwitch或其后的主机发送一畸形的ICMP包可能导致系统崩。通过本地或远程发送的畸形包能蒙骗服务器。当服务器收到畸形的ICMP包时,它将继续检查才对,然而它将丢失所有的路由功能,而且不将检查其它连接了。主要影响IntelExpressSwitch500系列。另外,Windows也有拒绝服务漏洞,对Win98NT4/SP5,6Win2K都有影响,当如上系统受到非法碎片包包含不合法碎片ICMPECHOs(pings)和UDPpackets攻击,Windows系统会拒绝服务。直至CPU占用率达到100%,最后系统崩溃。ICMP重定向提供了一种相当有效的DoS。不象ARP入口,这些特定主机路由入口永不过期。注意,攻击没有要求必须从局域网内发起,事实可以从广域网上发起。如果子网所用DNS位于网关外,产生一个到该DNS的错误路由是很容易的,通过在Pwin98下测试,由ICMP重定向包产生的路由都是掩码为55的特定主机路由,没有办法产生诸如这样掩码下的网络路由。此外,由ICMP重定向包产生的路由还是会过期的,会被删除,但耗时很长。许多桌面操作系统线性搜索自己的路由表,如果你利用ICMP重定向包加了太多特定主机路由到它们的路由表中,极其容易造成系统的瘫痪。对于Unix系统,虽然搜索路由表时不是线性搜索,但过多的特定主机路由会消耗大量的内存空间。于是,就有了海信“设擂”50万其欲为何的报道:8月21日海信集团在中关村当代商城,举行新闻发布会:海信“8341防火墙”悬赏“50万”,接受全国及至全球的计算机、网络界高手检测。虽然结果是没有人能够拿到防火墙后面的密码,但是防火墙遭到大量的ICMP攻击,导致防火墙的IP地址ping不通,造成大量攻擂者以为海信公司言而无信,取消了测试,转而怒牵于海信公司主页,于是8月24日海信集团网站被“黑”。海信公司自己提供的防火墙遭攻击记录如下:攻击类型 攻击次数1ICMP攻击 3340502碎片攻击 255243端口扫描 43654WEB服务攻击 12275UDP攻击 234 6拒绝服务攻击 12事实可以看到,造成海信服务器“拒绝服务”的绝大多数攻击来自于ICMP攻击。此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。不过,对于防止拒绝服务攻击,有关部门也采取了一些相应的措施:对于信息淹没攻击,我们应关掉可能产生无限序列的服务来防止这种攻击。比如我们可以在服务器端拒绝所有的ICMP包,或者在该网段路由器上对ICMP包进行带宽限制,控制其在一定的范围内。第三章 ICMP部分功能的模拟实现3.1 背景3.1.1 ping命令的深入认识ICMP协议提供的网络工具之一就是网络管理员最常使用的ping命令。ping命令可以把一个ICMP回显请求发送给一个指定的主机,接收该命令的主机通过回送一个ICMP回显应答来对收到的ICMP回显请求进行应答。 ping命令的目的是测试主机是否存在。其实,ping命令是测试网络中两个主机是否可以实现最低级别的连通性。它的格式是:ping (注:若只用IP主机名的话,则该命令不仅可用来校验两个主机之间的连通性,而且还可以测试本地主机是否可以对主机名正确解析)例如:使用ICMP协议来进行主机探测 -1,ICMP ECHO(Type 8) 和ECHO Reply (Type 0) 我们使用一个ICMP ECHO数据包来探测主机地址是否存活(当然在主机没有被配置为过滤ICMP形式),通过简单的发送一个ICMP ECHO(Type 8)数据包到目标主机,如果ICMP ECHO Reply(ICMP type 0)数据包接受到,说明主机是存活状态。 如果没有就可以初步判断主机没有在线或者使用了某些过滤设备过滤了ICMP的REPLY。 -| | - ICMP ECHO request -| |HOST| - |HOST| | | A | - | B | | | | 如果存活或者没有过滤 | | | - 将返回ICMP RCHO REPLY - | |-图2 主机间通过ICMP交互的示意图这种机制就是我们通常所用的ping命令来检测目标主机是否可以ping到。 下面是两个LINUX机器的演示: rootxundi /root# ping PING () from : 56(84) bytes of data. 64 bytes from : icmp_seq=0 ttl=255 time=4.4 ms 64 bytes from : icmp_seq=1 ttl=255 time=5.9 ms 64 bytes from : icmp_seq=2 ttl=255 time=5.8 ms - ping statistics - 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 4.4/5.3/5.9 ms 下面是snort所显示的信息包(ICMP ECHO request & replay报文):01/26-13:16:25.746316 - ICMP TTL:64 TOS:0x0 ID:6059 ID:5721 Seq:1 ECHO 89 D7 8E 38 27 63 0B 00 08 09 0A 0B 0C 0D 0E 0F .8c. 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F . 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !#$%&()*+,-./ 30 31 32 33 34 35 36 37 01234567 01/26-13:16:25.746638 - ICMP TTL:255 TOS:0x0 ID:6072 ID:5721 Seq:1 ECHO REPLY 89 D7 8E 38 27 63 0B 00 08 09 0A 0B 0C 0D 0E 0F .8c. 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F . 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !#$%&()*+,-./ 30 31 32 33 34 35 36 37 01234567 0 4 8 16 31 _ | 8位类型 | 代码=0 | 校验和 | |_|_|_| | 表示符 | 序列号 | |_|_| | Option data | |_| (注:但上面有点要注意的是,如果你使用解析被探测主机名的方法来进行ping探测,你就会在权威DNS服务器中留下你(攻击者)的LOG记录。) ping命令的另一个功能是连续发送多个测试消息,这样,在终端上显示每个请求序号和收到应答消息的时间。这种信息可以用来帮助用户确认丢失数据报的链路以及发送消息顺序错误的链路或经由不同的路由。例如:跟踪路由,不是从一条路由中搜集所有的路由器的信息,而是利用了IP协议对也就是将过期的IP数据报的处理规则来进行跟踪。这种即将过期的数据报报头的生存期TTL字段的值接近于0。路由器不会对TTL字段值为0或1的数据报进行转发,但路由器仍然向该数据报源主机回送一个ICMP消息,表示该数据报在传输过程中因过期而被丢弃。由于ICMP消息是由发现数据报已过期的路由器发送给数据报源主机的,因此当该数据报源主机得到ICMP错误消息时,该主机就可以得到发送该ICMP消息的路由器在网络中的位置.按照同样的原理,路由跟踪程序通过发送多个带有不同TTL数值的ping命令就可以确定主机之间的路由,具体来说,跟踪程序发送的第一个ping的TTL值为1。当第一个路由器收到该ping命令后将立即将其丢掉,同时将一个ICMP错误消息回送给数据源主机。收到第一个ICMP错误消息后,该路由跟踪程序将第一个路由器的地址保存起来,接着向远程主机发送TTL值为2的ping命令。本次发送的回显请求消息虽然可以通过第一个路由器,但将引发路由器回送一个ICMP错误消息。依次类推,该跟踪程序连续发送ping命令直到其TTL值足以保证ping数据报到达一个返回正常应答消息的远程主机为止。到此为止,该程序可以按顺序显示所有ICMP错误消息路由器的IP地址。3.2 存在的问题1) 使用ping命令不方便。现在,当我们要用到ping命令时,就会:在开始菜单下找到运行,在运行对话框中,输入ping命令;或者:在开始菜单下找到程序,然后找到附件,点击其中的MS-DOS,就可进入DOS环境下,输入ping命令。但是,我们会发现,若采用前一种输入方法,屏幕会一闪而过,接下去命令窗口就看不见了;若采用后者,步骤较麻烦,老是要进入MSDOS对话框。2)在要测试网络是否通畅时,我们经常使用ping命令,但是没有去用程序模拟它。3)模拟ping命令的环境不便。虽然有程序模拟,但是在DOS或C语言下的,不直观。如以下,就是在Linux中的部分代码:此为ICMP的数据结构:struct icmp u_int8_t icmp_type; /* type of message, see below */ u_int8_t icmp_code; /* type sub code */ u_int16_t icmp_cksum; /* ones complement checksum of struct */ union u_char ih_pptr; /* ICMP_PARAMPROB */ struct in_addr ih_gwaddr; /* gateway address */ struct ih_idseq /* echo datagram */ u_int16_t icd_id; u_int16_t icd_seq; ih_idseq; u_int32_t ih_void;当程序编写完,程序运行的操作时,却要注意一些编译细节:1) 用root登陆,编译以上程序:gcc -o myping myping.c,其目的有二:一是编译,二是让myping属于root用户2) 再执行chmod u+s myping,目的是把myping程序设成SUID的属性。3) 退出root,用一般用户登陆,执行./myping 。有以下执行结果:PING (48): 56 bytes data in ICMP packets.64 byte from 48: icmp_seq=1 ttl=242 rtt=3029.000 ms64 byte from 48: icmp_seq=2 ttl=242 rtt=2020.000 ms64 byte from 48: icmp_seq=3 ttl=242 rtt=1010.000 ms-PING statistics-3 packets transmitted, 3 received , %0 lost4)显示复杂。虽然所反映的信息很全面,还有包的反馈大小,但是一般用户打入ping命令的目的是查看网络是否通,是否能连上另一台主机,而不需要太多的内容。一般用户还不太看得懂,因而用户使用的方便性打了折扣。3.3 PingDemo的功能特点 于是我就仿造ping命令的实现结果,模拟了小程序。其功能有:1) 测试出主机之间是否连通2) 可视化界面3) 显示简单,对一般用户容易看懂4) 容量小,易携带图3 是模拟ping的界面3.3.1 网络的连通要测试网络是否连通,只要在Host的文本框中输入要测试的IP地址,然后就可以通过ping命令测试出是否连通。定义了ICMP的包头的格式,包括目的地址、原地址、字节数等。IP地址是32位的,因而要对输入的文本进行划分,把它分为网络地址和主机地址,在进行查询。当所要查询的主机存在时,出现对话框表示可连通;但是当主机不存在时,就会出现一些错误的信息提示对话框。3.3.2 可视化界面基于可视化的ping命令,就可以在Windows平台上查看,比较方便,也比较简洁。带有标签“Host”的文本框是用来输入IP地址的;按钮“Ping”是用来执行命令ping,而省去了打入命令的时间;按钮“close”是关闭程序。通过在文本框输入IP地址,再点击“ping”按钮,会出现对话框告诉你连通情况。3.3.3 显示简单,对一般用户容易看懂在这个简单的输入框中只要输入一些数字,就可执行命令。如“5”,若ping通了,就会出现对话框告诉你通了,但不会告诉你很多数据,只是说已连通,这对于不懂网络知识的人,也能操作,也知道是否ping通了,而不用看数据,去分析是否连通。3.3.4 容量小,易携带这个软件加上所有文件只有四点多兆,放入优盘可随身携带,很方便。 3.4 模拟环境ping命令是用来测试本机与另一台主机间的网络通信路径,所以模拟环境由硬件环境和软件环境组成。3.4.1 硬件环境两台连着网线的计算机,或局域网中的一台计算机。这样的话,当从一台计算机中查看到IP地址时,在另一台装有PingDemo的计算机输入,就能查看网络的连通性。3.4.2 软件环境Windows 2000,Microsoft Visual C+ 6.03.5 实现程序3.5.1 文件组成在Microsoft Visual C+下,组成PingDemo这个应用程序由以下几个文件组成:1) PingDemo.h这个头文件是程序的主头文件,它包含了程序要用到的其他头文件以及声明了CpingDemoApp所用到的类。#ifndef CPING_H#define CPING_H#include StdAfx.h/包含了“StdAfx.h”头文件,引入系统标准/MFC的子类头文件typedef struct tagIPINFO/定义了IP的一些格式 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 bufferIPINFO;typedef IPINFO* PIPINFO;typedef struct tagICMPECHO/定义了ICMP的消息格式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 bufferIPINFOipInfo;/ Reply optionsICMPECHO;typedef ICMPECHO* PICMPECHO;class Cping/定义了Cping类public:CPing();CPing();BOOL Ping(char* strHost);private:/ ICMP.DLL Export Function PointersHANDLE (WINAPI *pIcmpCreateFile)(VOID);BOOL (WINAPI *pIcmpCloseHandle)(HANDLE);DWORD (WINAPI *pIcmpSendEcho)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD);HANDLE hndlIcmp;/ LoadLibrary() handle to ICMP.DLLBOOL bValid; / if it doesnt construct properly, it wont be valid;#endif2) PingDemo.cpp这是执行程序的主要原代码,定义执行程序的类的行为,还包括类CpingDemoApp。包含了以下的一些头文件:#include stdafx.h#include PingDemo.h#include PingDemoDlg.h关于文本框收到用户的输入的处理:CPingDemoDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)/ 反馈当按回车键时的行为else if (nResponse = IDCANCEL)/反馈当删除所要输入的行为/ 一旦对话框被关闭,返回FALSE 退出执行程序return FALSE;3) PingDemo.rc在这个文件里显示了所有Microsoft Windows的资源和控件。包括资源子目录中的icons、bitmaps、cursors等。其中icon文件用来作为主执行程序的图标。4) 还涉及到StdAfx.h和StdAfx.cpp,主要是用来建立预定义的头文件PingDemo.pch和StdAfx.obj。3.5.2 网络套接字网络通信是以套接字为基础的,一个套接字就是通信的一端。在通信的每一端,都可以找到与其对应的一个套接字。每当一台主机要与另一台机器对话时,它首先就要创建一对套接字,即使它正在使用着一对套接字与那台计算机通信,因为这次又开始了一次新的对话。通常所说的网络通信,实际上是两台计算机通过一对套接字相互传输数据的过程。一个正在被使用的套接字有着它的类型和与其相关的进程。套接字可以根据通信任务的性质分类。用户可觉察出它们的区别。应用程序一般仅在同一类的套接字间通信。目前可以使用三种套接字,即流套接字、数据报套接字和原始套接字。流套接字提供了双向的、有序的、无重复并且无记录边界的数据流服务。数据报套接字支持双向的数据流,但并不保证数据是可靠、有序和无重复的。也就是说,一个从数据报套接字中接收信息的进程有可能发现信息重复了,或者顺序不同。而原始套接字允许对低层协议如IP和ICMP直接访问,主要用于新的网络协议实现的测试等。本程序就采用了原始套接字接口。最早使用套接字编程的是Berkeley分校的研究人员们,他们在UNIX平台上开发了Berkeley套接字方案,使得通过这种接口能实现多种网络协议之间的连接。Windows Socket规范以他的Socket接口为范例定义了一套Microsoft Windows下的网络编程接口。以使用户能充分利用Windows消息驱动机制进行编程。因而,可以看到,本程序也包含了WSOCK32.LIB。(图4)3.6 操作过程及结果显示ping命令在任何大于等于2的计算机数中,都能使用。因而,为了显示操作过程,我选择了校园网中的两台计算机:假设计算机A是装有PingDemo的测试机,而计算机B是被测试机。于是操作步骤如下:a) 先选中计算机B的网上邻居按鼠标右键点击“属性”,看到“本地连接”,然后选中它再按鼠标右键点击“属性”,出现一个对话框,选中“TCP/IP协议”,点击下边的按钮“属性”,又出现一个对话框,就可以看到IP地址了,把它记下来。b) 打开计算机A的PingDemo程序,出现一个小巧的对话框,在这个对话框的Host的旁边有一个文本框,输入刚才记下的IP地址。(如图5)输入IP地址图5 输入IP地址界面c)按按钮“ping”。不管是否ping通,都会出现一个对话框说明情况。 当ping通时,会出现如图6的界面:图6 ping通出现的对话框表示主机已连在网络上,正在运行,与连在网上的其他机子都通。当ping不通时,会出现如图7的界面:图7 ping不通的界面表示主机所测的IP地址不存在或,机子关着,没应答,不通。第四章ICMP的发展趋势(基于IPv6的ICMP)4.1 IPv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省东港市2026届化学九年级第一学期期中质量跟踪监视模拟试题含解析
- 监狱护栏网施工方案
- 唐山市重点中学2026届九年级化学第一学期期中达标检测试题含解析
- 2026届陕西省西安高新一中学英语九年级第一学期期末联考试题含解析
- 2026届内蒙古伊金霍洛旗化学九年级第一学期期中综合测试试题含解析
- 2026届辽宁省大石桥市水源镇九一贯制学校九年级化学第一学期期中经典试题含解析
- 农民果园承包经营合同书5篇
- 2026届辽宁省丹东二十九中学九上化学期中质量检测模拟试题含解析
- 工业园区租赁合同终止及环保措施协议
- 离婚协议书起草与婚姻关系解除纠纷解决合同
- 2022版义务教育《体育与健康课程标准》测试题-含答案
- 狮子王中英文台词对照(超全的完整版)(英语口语练习必备)
- GB/T 8167-1987包装用缓冲材料动态压缩试验方法
- GB/T 34903.2-2017石油、石化与天然气工业与油气开采相关介质接触的非金属材料第2部分:弹性体
- GB/T 19806-2005塑料管材和管件聚乙烯电熔组件的挤压剥离试验
- -Unit 2知识点归纳 牛津译林版英语九年级上册
- 中医内科学表格
- 陶瓷-课件商周至汉代瓷器
- 村卫生室健康扶贫督导考核表
- DB37T 3842-2019 铁矿绿色矿山建设规范
- 《光电显示技术》OLED原理
评论
0/150
提交评论