利用ICMP控制报文协议 来判断两端之间的网络速度

来源:互联网 发布:java的优点和缺点 编辑:程序博客网 时间:2024/06/05 14:40

#include <Icmpapi.h>

 #pragma comment(lib,"iphlpapi.lib") 

 
void TestFunc()
{
HANDLE icmpHwnd;
icmpHwnd=IcmpCreateFile();
IPAddr pAddr;
pAddr=(IPAddr)inet_addr("192.168.8.169");
icmp_echo_reply pData;
for(int i=1;i<=1;i++)
{
IcmpSendEcho(icmpHwnd,pAddr,NULL,0,NULL,(LPVOID)&pData,sizeof(icmp_echo_reply),0);
if (pData.Status==0)
{
//printf("Ping测试返回的结果: Time=%dms TTL=%d \n",(int)pData.RoundTripTime(int)pData.Options.Ttl);
}



你可能会发现,用IcmpSendEcho 测试 127.0.0.1的时候,ICMP_ECHO_REPLY.RoundTripTime 会等于0
其实,这个函数是没有出错的,即使用Ping 127.0.0.1也是可以的
那么应该怎么去判断这个函数出错呢?
用 ICMP_ECHO_REPLY.Status 来获得测试状态(记住,当Status为0的时候,函数是正确运行的)
常量名
含义
IP_SUCCESS
0
状态是成功。
IP_BUF_TOO_SMALL
11001
答复缓冲区太小。
IP_DEST_NET_UNREACHABLE
11002
目标网络不可达。
IP_DEST_HOST_UNREACHABLE
11003
目标主机不可达。
IP_DEST_PROT_UNREACHABLE
11004
目的地的协议是遥不可及。
IP_DEST_PORT_UNREACHABLE
11005
目标端口不可达。
IP_NO_RESOURCES
11006
IP资源不足是可用的。
IP_BAD_OPTION
11007
指定了错误的IP选项。
IP_HW_ERROR
11008
一个硬件错误。
IP_PACKET_TOO_BIG
11009
包太大。
IP_REQ_TIMED_OUT
11010
请求超时。
IP_BAD_REQ
11011
一个坏的请求。
IP_BAD_ROUTE
11012
一个糟糕的路线。
IP_TTL_EXPIRED_TRANSIT
11013
在传输过程中的生存时间(TTL)的过期。
IP_TTL_EXPIRED_REASSEM
11014
在碎片重组过程中的生存时间过期。
IP_PARAM_PROBLEM
11015
一个参数的问题。
IP_SOURCE_QUENCH
11016
数据报到达太快,处理和数据报可能被丢弃。
IP_OPTION_TOO_BIG
11017
一个IP选项是太大了。
IP_BAD_DESTINATION
11018
一个坏的目的地。
IP_GENERAL_FAILURE
11050
一般故障。这个错误可以返回一些畸形的ICMP数据包


0 0
原创粉丝点击