資源簡介
在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:?“?< 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?“?< ?<“?[“?< ?<“?with?a?maximum?of?“?< }
else?//解析主機名失敗
{
cerr?<“\nCould?not?resolve?the?host?name?“?< ?<“error?code:?“?< WSACleanup();
return?-1;
}
}
else
{
//輸出屏幕信息
cout?<“\nTracing?route?to?“?< ?<“?with?a?maximum?of?“?< }
//填充目的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:?“?< 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:?“?< 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:?“?< 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\li
?????文件??????????2??2013-09-21?20:19??tracert\test1\Debug\li
?????文件??????????2??2013-09-21?20:19??tracert\test1\Debug\li
?????文件??????????2??2013-09-21?20:19??tracert\test1\Debug\li
?????文件??????????2??2013-09-21?20:19??tracert\test1\Debug\li
?????文件??????????2??2013-09-21?20:19??tracert\test1\Debug\li
?????文件???????1736??2013-09-21?20:19??tracert\test1\Debug\li
?????文件???????3288??2013-09-21?20:19??tracert\test1\Debug\li
?????文件????????786??2013-09-21?20:19??tracert\test1\Debug\li
?????文件????????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.em
?????文件????????472??2013-09-17?15:21??tracert\test1\Debug\test1.exe.em
?????文件????????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個文件信息
- 上一篇:QT下實現的簡單坦克大戰
- 下一篇:keyclone 1.9i 破解版
評論
共有 條評論