. .. .
实 验 报 告
课程名称
网络通信程序设计
实验仪器 计算机 实验名称 路由跟踪
系 别 __计算机学院_ 专 业
___
班级/学号 _ _
学生
实验日期 2014年4月6日 成 绩 ___________________
指导教师 焦健
. 资料.
. .. .
实验二 路由跟踪实验
一、实验目的
学习分析程序功能结构。
熟悉ICMP协议的工作原理和路由跟踪的原理。 掌握VC6.0下程序调试、运行的基本方法。
二、实验原理
路由跟踪的实现就是巧妙地利用了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值,为一个整形数值 。
其实现流程如图1所示:
图 1路由跟踪流程图
三、实验容
1、按照附录容给RouteTrace程序添加代码,增加注释,调试程序通过。
源代码:RouteTrace.cpp
// RouteTrace.cpp : Defines the class behaviors for the application.
#include \#include \#include \#ifdef _DEBUG
#define new DEBUG_NEW #undef THIS_FILE
. 资料.
. .. .
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CRouteTraceApp
BEGIN_MESSAGE_MAP(CRouteTraceApp, CWinApp) //{{AFX_MSG_MAP(CRouteTraceApp)
// NOTE - the ClassWizard will add and remove mapping
macros here.
// DO NOT EDIT what you see in these blocks of
generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRouteTraceApp construction
CRouteTraceApp::CRouteTraceApp() {
// TODO: add construction code here,
// Place all significant initialization in InitInstance
. 资料.
. .. .
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CRouteTraceApp object
CRouteTraceApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CRouteTraceApp initialization
BOOL CRouteTraceApp::InitInstance() {
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL Enable3dControls();
// Call this when using MFC in a
. 资料.