使用ICMP实现路由跟踪
2010-06-27 20:40:36 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閹冣挃闁硅櫕鎹囬垾鏃堝礃椤忎礁浜鹃柨婵嗙凹缁ㄧ粯銇勯幒瀣仾闁靛洤瀚伴獮鍥敍濮f寧鎹囬弻鐔哥瑹閸喖顬堝銈庡亝缁挸鐣烽崡鐐嶆棃鍩€椤掑嫮宓佸┑鐘插绾句粙鏌涚仦鎹愬闁逞屽墰閹虫捇锝炲┑瀣╅柍杞拌兌閻ゅ懐绱撴担鍓插剱妞ゆ垶鐟╁畷銉р偓锝庡枟閻撴洘銇勯幇闈涗簼缂佽埖姘ㄧ槐鎾诲礃閳哄倻顦板┑顔硷工椤嘲鐣烽幒鎴旀瀻闁规惌鍘借ⅵ濠电姷鏁告慨顓㈠磻閹剧粯鈷戞い鎺嗗亾缂佸鏁婚獮鍡涙倷閸濆嫮顔愬┑鐑囩秵閸撴瑦淇婇懖鈺冪<闁归偊鍙庡▓婊堟煛鐏炵硶鍋撻幇浣告倯闁硅偐琛ラ埀顒冨皺閺佹牕鈹戦悙鏉戠仸闁圭ǹ鎽滅划鏃堟偨缁嬭锕傛煕閺囥劌鐏犻柛鎰ㄥ亾婵$偑鍊栭崝锕€顭块埀顒佺箾瀹€濠侀偗婵﹨娅g槐鎺懳熺拠鑼舵暱闂備胶枪濞寸兘寮拠宸殨濠电姵纰嶉弲鎻掝熆鐠虹尨宸ョ€规挸妫濆铏圭磼濡搫顫嶇紓浣风劍閹稿啿鐣烽幋锕€绠婚悹鍥у级瀹撳秴顪冮妶鍡樺鞍缂佸鍨剁粋宥夋倷椤掍礁寮垮┑鈽嗗灣閸樠勭妤e啯鍊垫慨妯煎亾鐎氾拷

代码运行效果图如下:
作者简介:本人是成都理工大学大四学生,学习计算机通信专业,对网络及编程有着非常浓厚的兴趣,希望能与大家共同探讨。
[摘要] 本文简单介绍了ICMP协议和一种利用ICMP在VC++下实现网络路由跟踪的方法,并给出一了个详细的例子。
[关键字] ICMP 路由跟踪 Visual C++6.0
一、概述
计算机在Internet中传递信息时,必须要经过路由器进行网络路由才能找到目的主机,把信息送到目的主机。路由器中都有一张路由表,表中保存了从本路由器到某一主机的路由信息,路由器就是通过该路由表进行网络寻径的。两台主机之间并没有一条固定的路径(即路由表并不固定),该路径随着网络的变动而作相应的变动,因而我们并不能直接从某一主机上得到去往另一主机的路径,要得到本机与网络上某台主机的网络路径就必须要进行路由跟踪。本文将介绍一种实现路由跟踪的方法。
二、ICMP简介
ICMP即Internet控制报文协议是一种用于特殊用途的报文机制,可以使互联网中的路由器或主机报告差错或提供有关意外情况的信息。
ICMP报文为两级封装,ICMP报文放在IP数据报的数据部分,IP数据报则放在帧的数据中进行网络传输(如下图1所示)。ICMP报文与其他普通报文一样,具有相同的路由选择,并没有特殊的优先权和增加可靠性。
(图1)ICMP报文的封装
在ICMP包头中包含了三个字段:1字节类型域、1字节代码域、2字节校验和。类型域表示了该报文的类型,如:回应请求报文,数据报超时报文等,代码域表示了该类型的几种不同情况,如:当类型为11(超时报文)时,代码为0表示TTL超时,为1表示片重组超时。在实现本文中所述的功能时要发送回应请求报文(类型为8),过程如下:源主机向目的主机发送一个类型为8的回应请求报文,若目的站点收到回应请求报文则把报文IP包头部中的目的IP与源IP地址交换,将类型8改为回应类型0,计算出新的校验和再发往源主机。若源主机收到了该回应报文,则不但说明了目的主机可达,而且说明目的主机与源主机之间的路由器工作正常,源主机和目的主机的IP、ICMP软件运行正常。但若在传输过程中了出现了某些问题,如网络不通等,导致数据被定向到一个无效的目的地,这时相关路由器或目的主机将发回目的不可达报文(类型为3),并在代码中说明该报文的具体情况:是网络不可达还是主机不可达等。若请求报文在传输过程中超时,即TTL被减为0(报文每经过一个路由器TTL都要减1),则该路由器返回一个TTL超时报文(类型为11),报文IP头中源IP地址即为本路由器的IP地址。
更多精彩
赞助商链接