资源简介
在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\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 破解版
相关资源
- ado数据库MFC图书管理系统vs2010
-
解决安装vs2012后vs2010 li
nk : fatal er - AnkhSvn-2.6.12735 支持VS2010-VS2015 官方原版
- VS2010、VS2012、VS2013代码自动注释插件
- 插件式GIS应用框架的设计与实现&mda
- 通过x264录制RGB屏幕视频vs2013工程,
- G726、G711、G711A转换为AAC
- VS2010 运行时库
- vs2010 ffmpeg实时解码h264码流
- 个人银行账户管理系统
- CMake-3.9.0
- 基于FFMPEG_SDL2_音视频播放_参考音频时
- G-code-Interpreter,G代码解释器
- 三款主题VS2010
- VS2010黑色主题Dark主题
- Visual Assist X VA_X插件及破解工具,适用
- TabControl用法图解VS2010
- Midas to FLAC3D-vs2010
- 浴池管理系统
- ecc使用源代码——真正好用的vs2010编
- 基于SIFT算法的图像拼接.rar
- VisualStudio 2008-2017系统注释中文包,解
- vs2010 win7下编译的openssl-1.0.2n静态库
- iar 工程转成vs2010工程
- PCL点云库SACSegmentation用法demo
- 相机标定完整工程vs
- VS2010安装包中的vs_setup.msi文件
- VS2010使用Glog日志类例程
- VS2010写的连连看
- 控制台三国杀第三版VS2010代码
评论
共有 条评论