• 大小: 74KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-18
  • 语言: 其他
  • 标签: tracert  

资源简介

tracert代码,根据具体的tracert原理,完成的网络编程,时效,有利于学习

资源截图

代码片段和文件信息

/*----------------------------------------------------------
功能说明:该程序简单实现了Windows操作系统的tracert命令功能,
      可以输出IP报文从本机出发到达目的主机所经过的路由信息。
注意:程序编译时应使用1字节对齐方式调整边界!
-----------------------------------------------------------*/
#include 
#include 
#include 
#include 
#include “itracert.h“

////////////////////////////////////////////////////////

int main(int argc char* argv[])
{
//检查命令行参数
if (argc != 2)
{
cerr << “\nUsage: itracert ip_or_hostname\n“;
return -1;
}

//初始化winsock2环境
WSADATA wsa;
if (WSAStartup(MAKEWORD(2 2) &wsa) != 0)
{
cerr << “\nFailed to initialize the WinSock2 DLL\n“
 << “error code: “ << WSAGetLastError() << endl;
return -1;
}

//将命令行参数转换为IP地址
u_long ulDestIP = inet_addr(argv[1]);
if (ulDestIP == INADDR_NONE)
{
//转换不成功时按域名解析
hostent* pHostent = gethostbyname(argv[1]);
if (pHostent)
{
ulDestIP = (*(in_addr*)pHostent->h_addr).s_addr;

//输出屏幕信息
cout << “\nTracing route to “ << argv[1] 
 << “ [“ << inet_ntoa(*(in_addr*)(&ulDestIP)) << “]“
 << “ with a maximum of “ << DEF_MAX_HOP << “ hops.\n“ << endl;
}
else //解析主机名失败
{
cerr << “\nCould not resolve the host name “ << argv[1] << ‘\n‘
 << “error code: “ << WSAGetLastError() << endl;
WSACleanup();
return -1;
}
}
else
{
//输出屏幕信息
cout << “\nTracing route to “ << argv[1] 
 << “ with a maximum of “ << DEF_MAX_HOP << “ hops.\n“ << endl;
}

//填充目的Socket地址
sockaddr_in destSockAddr;
ZeroMemory(&destSockAddr sizeof(sockaddr_in));
destSockAddr.sin_family = AF_INET;
destSockAddr.sin_addr.s_addr = ulDestIP;

//使用ICMP协议创建Raw Socket
SOCKET sockRaw = WSASocket(AF_INET SOCK_RAW IPPROTO_ICMP NULL 0 WSA_FLAG_OVERLAPPED);
if (sockRaw == INVALID_SOCKET)
{
cerr << “\nFailed to create a raw socket\n“
 << “error code: “ << WSAGetLastError() << endl;
WSACleanup();
return -1;
}
//设置端口属性
int iTimeout = DEF_ICMP_TIMEOUT;

if (setsockopt(sockRaw SOL_SOCKET SO_RCVTIMEO (char*)&iTimeout sizeof(iTimeout)) == SOCKET_ERROR)
{
cerr << “\nFailed to set recv timeout\n“
 << “error code: “ << WSAGetLastError() << endl;
closesocket(sockRaw);
WSACleanup();
return -1;
}
if (setsockopt(sockRaw SOL_SOCKET SO_SNDTIMEO (char*)&iTimeout sizeof(iTimeout)) == SOCKET_ERROR)
{
cerr << “\nFailed to set send timeout\n“
 << “error code: “ << WSAGetLastError() << endl;
closesocket(sockRaw);
WSACleanup();
return -1;
}


//创建ICMP包发送缓冲区和接收缓冲区
char IcmpSendBuf[sizeof(ICMP_HEADER)+DEF_ICMP_DATA_SIZE];
memset(IcmpSendBuf 0 sizeof(IcmpSendBuf));
char IcmpRecvBuf[MAX_ICMP_PACKET_SIZE];
memset(IcmpRecvBuf 0 sizeof(IcmpRecvBuf));

//填充待发送的ICMP包
ICMP_HEADER* pIcmpHeader = (ICMP_HEADER*)IcmpSendBuf;
pIcmpHeader->type = ICMP_ECHO_REQUEST;
pIcmpHeader->code = 0;
pIcmpHeader->id = (USHORT)GetCurrentProcessId();
memset(IcmpSendBuf+sizeof(ICMP_HEADE

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-06-11 18:40  第6章 Tracert程序\
     目录           0  2013-06-11 18:42  第6章 Tracert程序\itracert\
     目录           0  2013-06-11 18:40  第6章 Tracert程序\itracert\Code\
     文件        7467  2007-06-28 16:19  第6章 Tracert程序\itracert\Code\itracert.cpp
     文件        4413  2007-06-28 16:19  第6章 Tracert程序\itracert\Code\itracert.dsp
     文件         541  2007-02-12 16:05  第6章 Tracert程序\itracert\Code\itracert.dsw
     文件        1515  2007-02-13 23:10  第6章 Tracert程序\itracert\Code\itracert.h
     文件       66560  2007-06-28 16:38  第6章 Tracert程序\itracert\Code\itracert.ncb
     文件      100352  2007-06-28 16:38  第6章 Tracert程序\itracert\Code\itracert.opt
     文件        1501  2007-06-28 16:37  第6章 Tracert程序\itracert\Code\itracert.plg
     目录           0  2013-06-11 18:42  第6章 Tracert程序\itracert_icmpdll\
     目录           0  2013-06-11 18:40  第6章 Tracert程序\itracert_icmpdll\Code\
     文件        5068  2007-06-26 13:27  第6章 Tracert程序\itracert_icmpdll\Code\itracert_icmpdll.cpp
     文件        4402  2007-05-03 12:05  第6章 Tracert程序\itracert_icmpdll\Code\itracert_icmpdll.dsp
     文件         555  2007-05-03 10:24  第6章 Tracert程序\itracert_icmpdll\Code\itracert_icmpdll.dsw
     文件       50176  2007-06-27 17:31  第6章 Tracert程序\itracert_icmpdll\Code\itracert_icmpdll.ncb
     文件      100352  2007-06-27 17:31  第6章 Tracert程序\itracert_icmpdll\Code\itracert_icmpdll.opt
     文件        1559  2007-06-27 17:30  第6章 Tracert程序\itracert_icmpdll\Code\itracert_icmpdll.plg
     文件       26624  2007-06-29 13:31  第6章 Tracert程序\使用说明.doc

评论

共有 条评论