




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实 验 报 告 课程名称 网络通信程序设计 实验仪器 计算机 实验名称 路由跟踪 系 别 _计算机学院_ 专 业 _ 班级/学号_ _学生姓名 实验日期 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 stdafx.h#include RouteTrace.h#include RouteTraceDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CRouteTraceAppBEGIN_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_MSGON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CRouteTraceApp constructionCRouteTraceApp:CRouteTraceApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CRouteTraceApp objectCRouteTraceApp theApp;/ CRouteTraceApp initializationBOOL 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 _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically#endifCRouteTraceDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK) / TODO: Place code here to handle when the dialog is/ dismissed with OKelse if (nResponse = IDCANCEL)/ TODO: Place code here to handle when the dialog is/ dismissed with Cancel/ Since the dialog has been closed, return FALSE so that we exit the/ application, rather than start the applications message pump.return FALSE;源代码:ICMP.cpp / ICMP.cpp: implementation of the CICMP class.#include stdafx.h#include RouteTrace.h#include ICMP.h#include ws2tcpip.h#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/ Construction/Destruction/CICMP:CICMP()winsock = 0;m_pIp = NULL;m_pIcmp = NULL;m_pIp = (IP_HEAD *)new BYTEMAX_PACKET;m_pIcmp = (ICMP_HEAD *)new BYTEMAX_PACKET;CICMP:CICMP()delete m_pIp;delete m_pIcmp;BOOL CICMP:Initialize()WSADATA wsadata;if( WSAStartup(MAKEWORD(2, 1),&wsadata) ) AfxMessageBox(WSAStartup初始化失败!);return FALSE;winsock= WSASocket (AF_INET, /建立socket SOCK_RAW, IPPROTO_ICMP, NULL, 0,0);if(!winsock)AfxMessageBox( Socket创建失败!);return FALSE;int timeout =5000;setsockopt(winsock,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout, /设置接收超时sizeof(timeout);timeout = 5000;setsockopt(winsock,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout, /设置发送超时sizeof(timeout);return TRUE;void CICMP:Uninitialize() /释放Socketif(winsock)closesocket(winsock);WSACleanup();USHORT CICMP:CheckSum(USHORT *buffer, int size) /计算校验和 unsigned long cksum = 0; while(size 1) cksum+=*buffer+;size -=sizeof(USHORT); if(size ) cksum += *(UCHAR*)buffer; cksum = (cksum 16) + (cksum & 0xffff); cksum += (cksum 16); return (USHORT)(cksum);BOOL CICMP:SendICMPPack(char *pAddr)sockaddr_in sockAddr;memset(void *)&sockAddr,0,sizeof(sockAddr);sockAddr.sin_family = AF_INET;sockAddr.sin_port = 0;sockAddr.sin_addr.S_un.S_addr=inet_addr(pAddr);return SendICMPPack(&sockAddr);/-设置TTL-int CICMP:SetTTL(int TTL)int nRet=setsockopt(winsock, IPPROTO_IP, IP_TTL,(LPSTR)&TTL,sizeof(int); if(nRet=SOCKET_ERROR) CString ttlerr;ttlerr.Format(设置 TTL 错误!);AfxMessageBox(ttlerr);return 0;return 1;/-发送-BOOL CICMP:SendICMPPack(sockaddr_in *pAddr)/填充ICMP数据各项int state;char *p_data;m_pIcmp-type = ICMP_ECHO;m_pIcmp-code = 0;m_pIcmp-ID = (USHORT)GetCurrentProcessId();m_pIcmp-number = 0;m_pIcmp-time = GetTickCount();m_pIcmp-cksum = 0;/填充数据p_data = (char *)m_pIcmp + sizeof(ICMP_HEAD);memset(char *)p_data,0,DEF_PACKET);/检查和m_pIcmp-cksum = CheckSum(USHORT *)m_pIcmp,DEF_PACKET+sizeof(ICMP_HEAD);/发送数据state = sendto(winsock,(char *)m_pIcmp,DEF_PACKET+sizeof(ICMP_HEAD),NULL,(struct sockaddr *)pAddr,sizeof(sockaddr);if(state = SOCKET_ERROR) if(GetLastError()=WSAETIMEDOUT)m_strInfo = 连接超时!(发送);elsem_strInfo=出现未知发送错误!;return FALSE;if(state DEF_PACKET) m_strInfo = 发送数据错误!;return FALSE;memcpy(void *)&m_sockAddr,(void *)pAddr,sizeof(sockaddr_in);return TRUE;/-接收数据-BOOL CICMP:RecvICMPPack()int state;int len = sizeof(sockaddr_in);char * addr; struct hostent *lpHostent = NULL; int Maxfd = 1; / 监视的最大的文件描述符值+1 fd_set readFdSet; / 设置文件描述符 struct timeval Timeout; addr = inet_ntoa(m_sockAddr.sin_addr); FD_ZERO(&readFdSet); FD_SET(winsock, &readFdSet); Maxfd = max(Maxfd, winsock) + 1; Timeout.tv_sec = 10; / 设置响应时间限制 Timeout.tv_usec = 0; int e = :select(Maxfd, &readFdSet, NULL, NULL, &Timeout); /获取多路复用套接字的响应结果 if(e HeadLen * 4 ;if (state type)case ICMP_ECHOREPLY: /收到正常回显m_strInfo.Format(接收到%s %d字节响应数据,响应时间:%dms.,inet_ntoa(m_sockAddr.sin_addr),len,GetTickCount()-p_icmprev-time);routeaddr=addr;routestate=0; RouteState=到达目的主机!; return TRUE;break;case ICMP_TTLOUT: / TTL超时 routeaddr=inet_ntoa(m_sockAddr.sin_addr); routestate=1;RouteState=测试到路由器!;return TRUE;break;case ICMP_DESUNREACH: /目的不可达m_strInfo = 目的不可达!; routestate=0;RouteState=目的不可达;return TRUE;break;default : routestate=0;routeaddr=*;m_strInfo=未知错误!;RouteState=不明状态!; return TRUE;2、命令行窗口下运行:tracert 命令,记录运行结果和网
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源汽车智能驾驶交互界面在车载办公中的应用报告
- 新能源行业光伏发电技术升级与市场潜力研究报告
- 2025年风能发电设备制造行业竞争力分析报告
- 2025年新能源汽车智能座舱车载互联技术应用案例报告
- 生涯咨询招募方案模板
- 植草被安装施工方案
- 境外卫星电视节目应急预案
- 2025年新能源汽车充电基础设施建设与政策法规研究报告
- 朝阳公招考试题及答案
- 2025年新能源汽车车路协同通信技术在绿色出行推广中的应用报告
- 2025年上海市闵行区区管国企招聘笔试参考题库含答案解析
- 化工静电事故培训
- 海绵城市施工方案
- T-SAASS 164-2024 盐碱地蛇床绿色轻简化种植技术规程
- 二级WPS Office高级应用与设计计算机等级考试试题及答案指导(2025年)
- 智能计算系统:从深度学习到大模型 第2版课件 第四章-编程框架使用
- 供应链管理师二级练习卷含答案
- 《公路边坡网锚喷植被混凝土生态防护技术指南》
- 主要负责人安全生产责任制模版(三篇)
- 工程项目现场管理制度(业主方用)
- GB/T 25229-2024粮油储藏粮仓气密性要求
评论
0/150
提交评论