資源簡介
tracert代碼,根據(jù)具體的tracert原理,完成的網(wǎng)絡(luò)編程,時效,有利于學(xué)習(xí)

代碼片段和文件信息
/*----------------------------------------------------------
功能說明:該程序簡單實現(xiàn)了Windows操作系統(tǒng)的tracert命令功能,
??????可以輸出IP報文從本機出發(fā)到達(dá)目的主機所經(jīng)過的路由信息。
注意:程序編譯時應(yīng)使用1字節(jié)對齊方式調(diào)整邊界!
-----------------------------------------------------------*/
#include?
#include?
#include?
#include?
#include?“itracert.h“
////////////////////////////////////////////////////////
int?main(int?argc?char*?argv[])
{
//檢查命令行參數(shù)
if?(argc?!=?2)
{
cerr?<“\nUsage:?itracert?ip_or_hostname\n“;
return?-1;
}
//初始化winsock2環(huán)境
WSADATA?wsa;
if?(WSAStartup(MAKEWORD(2?2)?&wsa)?!=?0)
{
cerr?<“\nFailed?to?initialize?the?WinSock2?DLL\n“
?<“error?code:?“?< return?-1;
}
//將命令行參數(shù)轉(zhuǎn)換為IP地址
u_long?ulDestIP?=?inet_addr(argv[1]);
if?(ulDestIP?==?INADDR_NONE)
{
//轉(zhuǎn)換不成功時按域名解析
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協(xié)議創(chuàng)建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;
}
//設(shè)置端口屬性
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;
}
//創(chuàng)建ICMP包發(fā)送緩沖區(qū)和接收緩沖區(qū)
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));
//填充待發(fā)送的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
- 上一篇:載波相位測量
- 下一篇:WEB數(shù)據(jù)庫實驗報告8
評論
共有 條評論