科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC下使用ICMP实现路由跟踪

VC下使用ICMP实现路由跟踪

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文简单介绍了ICMP协议和在VC 下实现网络路由跟踪的方法,并给出详细的例子 。

作者:UNNY 来源:论坛 2007年10月21日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
三、路由跟踪的实现方法

  路由跟踪的实现就是巧妙地利用了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++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_COMBO CComboBox m_comb
最大跳数编辑框 IDC_MAXHOT int m_maxhot
跟踪按钮 IDC_TRACE OnTrace()  
停止按钮 IDC_STOP OnStop()  
列表框 IDC_LIST CListCtrl m_list
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章