• 大小: 9.14MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-09
  • 语言: 其他
  • 标签: vs2010  

资源简介

在vs2010下执行的tracert小程序,有简单的代码可供学习参考。

资源截图

代码片段和文件信息

// test.cpp : 定义控制台应用程序的入口点。
//

#include 
#include 
#include  
using namespace std;
#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_HEADER) ‘E‘ DEF_ICMP_DATA_SIZE);

//开始探测路由
DECODE_RESULT stDecodeResult;
BOOL bReachDestHost = FALSE;
USHORT usSeqNo = 0;
int iTTL = 1;
int iMaxHop = DEF_MAX_HOP;
while (!b

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      45056  2013-09-21 20:19  tracert\Debug\test1.exe

     文件     461648  2013-09-21 20:19  tracert\Debug\test1.ilk

     文件     773120  2013-09-21 20:19  tracert\Debug\test1.pdb

     文件   15466496  2013-09-23 11:00  tracert\ipch\test1-198f1032\test1-aadfba3d.ipch

     文件        744  2013-09-21 20:19  tracert\test1\Debug\cl.command.1.tlog

     文件      23464  2013-09-21 20:19  tracert\test1\Debug\CL.read.1.tlog

     文件        370  2013-09-21 20:19  tracert\test1\Debug\CL.write.1.tlog

     文件      88586  2013-09-21 20:19  tracert\test1\Debug\itracert.obj

     文件          2  2013-09-21 20:19  tracert\test1\Debug\link-cvtres.read.1.tlog

     文件          2  2013-09-21 20:19  tracert\test1\Debug\link-cvtres.write.1.tlog

     文件          2  2013-09-21 20:19  tracert\test1\Debug\link.41840-cvtres.read.1.tlog

     文件          2  2013-09-21 20:19  tracert\test1\Debug\link.41840-cvtres.write.1.tlog

     文件          2  2013-09-21 20:19  tracert\test1\Debug\link.41840.read.1.tlog

     文件          2  2013-09-21 20:19  tracert\test1\Debug\link.41840.write.1.tlog

     文件       1736  2013-09-21 20:19  tracert\test1\Debug\link.command.1.tlog

     文件       3288  2013-09-21 20:19  tracert\test1\Debug\link.read.1.tlog

     文件        786  2013-09-21 20:19  tracert\test1\Debug\link.write.1.tlog

     文件        378  2013-09-21 20:19  tracert\test1\Debug\mt.command.1.tlog

     文件        322  2013-09-21 20:19  tracert\test1\Debug\mt.read.1.tlog

     文件        322  2013-09-21 20:19  tracert\test1\Debug\mt.write.1.tlog

     文件        520  2013-09-17 15:21  tracert\test1\Debug\rc.command.1.tlog

     文件        294  2013-09-17 15:21  tracert\test1\Debug\rc.read.1.tlog

     文件        302  2013-09-17 15:21  tracert\test1\Debug\rc.write.1.tlog

     文件        406  2013-09-17 15:21  tracert\test1\Debug\test1.exe.embed.manifest

     文件        472  2013-09-17 15:21  tracert\test1\Debug\test1.exe.embed.manifest.res

     文件        381  2013-09-21 20:19  tracert\test1\Debug\test1.exe.intermediate.manifest

     文件         79  2013-09-21 20:19  tracert\test1\Debug\test1.lastbuildstate

     文件       2369  2013-09-21 20:19  tracert\test1\Debug\test1.log

     文件        200  2013-09-17 15:21  tracert\test1\Debug\test1_manifest.rc

     文件     601088  2013-09-21 20:19  tracert\test1\Debug\vc100.idb

............此处省略18个文件信息

评论

共有 条评论