设为首页 加入收藏

TOP

VC下使用ICMP实现路由跟踪(二)
2012-11-04 15:24:11 来源: 作者: 【 】 浏览:488
Tags:使用 ICMP 实现 路由 跟踪
  三、路由跟踪的实现方法

  路由跟踪的实现就是巧妙地利用了ICMP报文的TTL超时报文。其实现过程如下:源主机先向目的主机发送一个回应请求报文(类型8),TTL值设为1,第一个路由器收到后将TTL减1,这样TTL变为0,分组被废除,同时路由器向源主机发送一个TTL超时报文(类型为11),报文的IP包头中的源IP地址就是第一个路由器的地址,源主机就可以通过对该报文进行分析,得到第一个路由器的地址。接着发送TTL等于2的报文得到第二个路由器地址,再发TTL等于3的报文,如此下去直到收到目的主机的回应应答报文(类型为0)或目的不可达报文(类型为3),或者到了最大跳数(要检测路由器个数的最大值)。可以看到,对TTL的设置是实现跟踪的关键,使用函数setsockopt(m_Sock, IPPROTO_IP, IP_TTL,(LPSTR)&TTL,sizeof(int)) 可以对其进行设置,m_Sock是所创建的套接字,IP_TTL说明是进行TTL设置,TTL即是要设置的TTL值,为一个整形数值 。其实现流程可用下图2表示:


(图2) 流程图

  四、程序实现

  本文所介绍的程序是使用了Visual C++(www.cppentry.com)6.0编写,其过程如下:

  1、创建一个新的基于对话框的AppWizard工程,并命名为RouteTrace。

  2、在stdafx.h中加入#include "winsock2.h"。

  3、打开选择菜单Project->Setting (ALT+F7),进入Project Setting 对话框,在Link下的 Object/library modules 输入ws2_32.lib,然后点OK。

  4、自定义一个ICMP类。点击菜单中的Insert->New Class,进入New Class对话框,在Class type中选择Generic Class,在Name中输入类名CICMP,然后点OK,这样就新建了一个CICMP类。

  5、将对话框设置成如图3所示的样子:


(图3 程序界面)

  启动Class Wizard 为各控件添加响应函数和关联变量,控件对应的ID及响应函数或变量为:

控件ID响应函数变量
地址组合框IDC_COMBOCComboBoxm_comb
最大跳数编辑框IDC_MAXHOTintm_maxhot
跟踪按钮IDC_TRACEOnTrace()  
停止按钮IDC_STOPOnStop() 
列表框IDC_LISTCListCtrlm_list

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇水晶报表在VC6.0中的使用方法 下一篇基于VC的接收机串口程序设计

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: