好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

网络管理系统中Ping和Tracert功能的实现.docx

6页
  • 卖家[上传人]:ji****81
  • 文档编号:201899869
  • 上传时间:2021-10-13
  • 文档格式:DOCX
  • 文档大小:130.01KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 网络管理系统中Ping和Tracert功能的实现 宋凌怡1,舒 涛2,夏 龄2,周德荣2(1.四川民族学院 计算机科学系;2.四川民族学院 网络信息中心,四川 康定 626001)摘 要:文章首先简要介绍了ICMP协议和Ping、Tracert功能的原理及工作流程的基础,然后详细描述了采用Delphi作为开发工具通过调用Windows提供的ICMP.DLL动态链接库实现Ping和Tracert功能的具体方法.关键词:ICMP;Ping; Tracert;DelphiTP393.08 :A :1673-260X(2011)07-0029-021 引言在网络管理中,网络流量、网络设备的连通状况等都应该在管理人员的掌握之中.在网络管理中经常需要用到Ping和Tracert命令测试网络的连通性,在一个网络管理系统中Ping和Tracert功能是必须具备的.在网络管理系统要实现Ping和Tracert功能有两种方式:(1)调用操作系统提供的Ping和Tracert命令.这种方式是在程序中调用Ping和Tracert命令,将命令执行结果通过输入输出重定向功能输出到文本文件中,然后再由系统进行处理.缺点是调用Ping和Tracert命令后无法控制命令的执行,只有等命令执行完后才能进行处理.且Ping和Tracert命令是基于字符界面模式下的独立可执行文件,在运行时会出现独立的执行窗口,导致了软件界面不统一、不美观;(2)通过调用Windows操作系统提供的实现ICMP协议的ICMP.DLL中的相关函数自行编程来实现Ping和Tracert功能,这种方式在实现Ping和Tracert功能的同时,保证的软件界面的统一,也更容易对检测结果进行进一步处理.本文详细介绍了在笔者参与的四川民族学院网络管理系统中,利用ICMP.DLL使用Delphi编写实现Ping和Tracert功能的具体方法.2 ICMP协议ICMP协议(Internet control message protocol,网际控制报文协议)是工作在IP层的TCP/IP协议族中的一个子协议,主要用于主机和路由设备之间进行控制消息和错误消息的传递,实现路由维护、主机探测、路由选择和流量控制.根据RFC 792中的规定,允许ICMP报文封装在IP数据报内,这样应用程序就可以从原始的IP接口中直接进行ICMP报文的发送和接收.ICMP报文分为信息报文、差错报文、控制报文.Ping就是向信宿主机发送ICMP信息报文,信源主机回应ICMP信息报文或差错报文,Ping程序根据这些收到的ICMP报文,可以知道信源主机是否.在ICMP协议中一种定义了15种报文类型,其中Ping和Tracert用到的信息报文有:回声请求报文(ICMP报文类型值为8)、回声请求响应报文(ICMP报文类型值为0)、时间戳请求报文(ICMP报文类型值为13).3 Windows API中ICMP相关函数在Windows下的ICMP.DLL动态链接库中封装了部分ICMP协议的实现,用于实现Ping功能的函数主要有IcmpCreateFile()、IcmpCloseHandle()和IcmpSendEcho().函数IcmpCreateFile()的功能是返回一个用来和ICMP进行联系的句柄,其它函数通过该句柄发送和接送ICMP报文.函数IcmpCloseHandle的用于关闭通过IcmpCreateFile函数创建的句柄.函数IcmpSendEcho几乎包含了ICMP.DLL所提供的所有功能,它通过IcmpCreateFile打开的句柄发送ICMP请求信息,并接收ICMP应答信息.如果调用IcmpSendEcho()发送一个ICMP请求信息,该函数将一直等待应答到达或超时后才返回,同时将为主程序返回IP_SUCCESS.在主程序中,通过调用GetLastError()函数可以查看在ipexport.h定义的API函数专有错误代码IP_STATUS来得到错误信息和出错原因.4 功能实现4.1 程序的工作流程Ping程序是网络管理系统中用于确定主机是否的程序.它首先发送ICMP回声请求(ECHO_REQUEST)报文给目的主机,并等待目的主机回应ICMP回声应答(ECHO_REPLY)报文.当目的主机正常收到请求报文后会向发送端返回回声应答报文,该报文的数据与回声请求报文的数据是完全一样的,其中包括目的主机的IP地址,ICMP报文所发送数据的大小,请求和回应报文的往返时间及返回报文的TTL.发送端收到回声应答报文后,可以根据报文中的各种数据来判断网络状况.若客户机未收到回显应答报文,则认为发送的数据包丢失.Tracert程序是网络管理系统中用于确定路由的程序.它通过向目的主机发送具有不同TTL的ICMP回声请求报文,以确定从发送端到目的主机的路由.路由上的每个路由设备都要在转发ICMP回声请求报文时将其TTL减1,因此TTL是有效的跳转计数.当TTL值减到0时,路由设备向发送端返回一个ICMP超时的信息.通过发送TTL为1的第一个回声请求报文并在后续的发送中每次将TTL加1,直到TTL值达最大,便可以确定路由了.通过以上描述可以看出,Tracert是建立在Ping的基础上的,在具体实现时只需要对Ping进行一些改写就可以实现Tracert.4.2 Ping功能的实现在Delphi中为了使用ICMP.DLL链接库的内部函数,必须自己定义一些结构,并且需要自己声明用到的函数.Delphi中没有带ICMP协议的库文件,但这些函数和结构都可以在相应的C头文件icmpapi.h及ipexport.h中找到.具体结构定义和函数声明如下:{定义ICMP数据类型}typeDWORD=LongWord;THandle=LongWord;PIPOptionInformation=^TIPOptionInformation;TIPOptioninformation=recordTTL:Byte;TOS:Byte;Flags:Byte;OptionSize:Byte;Optiondata:Pchar;end;PIcmpEchoReply=^TIcmpEchoReply;TIcmpEchoReply=recordAddress:DWORD;Status: DWORD;DataSize:Word;Reserved:Word;data:Pointer;Options:TIPOptionInformation;{声明要用到的相关函数}Function IcmpCreateFile():THandle;stdcall external ´ICMP.dll´;Function IcmpCloseHandle(Handle:THandle):Boolean;stdcall external ´ICMP.dll´;FunctionIcmpSendEcho(Handle:THandle;DestAddr:DWORD;Requestdata:Pointer;RequestSize:Word;RequestOptions:PIPOptionInformation;ReplyBuffer:Pointer;ReplySize:DWORD;TimeOut:DWORD):DWORD; stdcall external ´ICMP.dll´;在定义结构和声明完函数后,请可以进行Ping功能的具体操作,主要代码如下:Function Ping(DestAddress:string;TimeOut:Word):string; //定义实现Ping功能的函数,调用它时须有目的地址和超时时间两个参数{定义一些必须的变量}begin{计算机数据包大小}FSize:=40;BufferSize:=SizeOf(TIcmpEchoReplay)+FSize;GetMem(pRevDate,FSize);GetMem(pIPE,BufferSize);{准备数据}FillChar(pIPE^,SizeOf(pIPE^),0);//pIPE表示ICMP回应报文,类型为PIcmpechoReplypIPE^.data:=pRevData;sendstring:= ´这是一个Ping数据包´pReqdata:=PChar(sendstring);FillChar(IPOpt,SizeOf(IPOpt),0); //IPOpt表示发送的数据包,类型为TIPOptionInformationIPOpt.TTL:=64; // TTL值设置FTimeOut:=TimeOut; //超时设置PingResult:=IcmpSendEcho(hICMP,FIPAddress,pReqData,length(sendstring),@IPOpt,BufferSize, FTimeout); // 调用IcmpSendEcho进行Ping操作{返回结果}if PingResult=0 thenResult:= ´超时’;if pReqData^=pIPE^.Options.OptionsData^ thenresult:= ´目的主机连接正常’;end;4.3 Tracert功能的实现Tracert功能实际上是将到目的主机中间的所有路由节点都依次Ping一次.在具体实现时,先定义一个tracert函数,在这个函数通过调用上述已经实现的ping函数(ping函数需要增加一个调用参数,好在调用它时控制TTL),一次访问到达目的主机路径上的所有路由节点,并获得发往每个路由的数据包所耗费的时间,作为函数的输出,这样就实现了Ttacert功能.5 结束语Ping和Tracert功能在网络管理系统中是必不可少的.本文在简要介绍ICMP协议和Ping、Tracert原理的基础上,通过调用Windows中ICMP.DLL动态链接库中的相关函数实现了Ping和Tracert功能.该方法已经在四川民族学院网络管理系统中得到了实际应用,效果良好.——————————参考文献:〔1〕RFC792, Internet Control Message Protocol[S] .〔2〕微软公司.MSDN Library[M].美国:微软公司.〔3〕鲍敏,吴昊.Delphi网络高级编程[M].北京:人民邮电出版社.-全文完-。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.