资源简介
在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 破解版
相关资源
- 内部vs2010版本人事管理系统全源码
- SURF算法的图像拼接和快速拼接算法
- 对图像的一维高斯滤波操作
- VS2010 Opencv-2.4.3的配置
- tesseract_lib_vs2010编译好的dll库和lib文件
- FATFSv0.12 windows移植测试 多线程 文件
- VS2010下载地址115091
- VS2010 使用TeeChart绘图控件
- libsndfile的vs2010工程
- VS2010 用CxImage读入各种图片格式后在内
-
window vs2010 中安装libxm
l2所需要的文 - QGIS-源码QT4.8.6 和VS2010 qgis
- 基于VS2010的CSocket网络文件传输
- 基于.net+vs2010的简单酒店管理系统
- vs2010旗舰版
- 实现三维图形绘制
- 中国象棋vs2010源码
- VS2010 免杀域名360个人版远控
- VS10-KB2251084-x86.exe
- cocos2d-x塔防实现
- VS2010学习版
- VS2010 操作 Word
- NPOI操作Docx表
- 色彩恢复的多尺度Retinex算法MSRCR-VS2
- vs2010操作word
- Solidworks2015和vs2010二次开发的环境搭建
- Tesseract&Leptonica库 VS2010
- vs_setup.msi197439
- 单高斯背景建模opencv
- VS2010下编译的GDAL1.9.1最新版
评论
共有 条评论