IP Helper ICMP相关接口主要用到两个结构,ICMP_ECHO_REPLY和IP_OPTION_INFORMATION ICMP_ECHO_REPLY structure ICMP_ECHO_REPLY 表示IPv4请求的响应信息所返回的数据 语法 typedef struct icmp_echo_reply { IPAddr Address; ULONG Status; ULONG RoundTripT
IP Helper ICMP相关接口主要用到两个结构, ICMP_ECHO_REPLY和IP_OPTION_INFORMATION
ICMP_ECHO_REPLY表示IPv4请求的响应信息所返回的数据
typedef struct icmp_echo_reply { IPAddr Address; ULONG Status; ULONG RoundTripTime; USHORT DataSize; USHORT Reserved; PVOID Data; struct ip_option_information Options; } ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY;
Type: IPAddr
响应的IPv4地址,IPAddr 格式.
Type: ULONG
请求状态类型为IP_STATUS.可以是下列值, 这些值定义在Ipexport.h中:
Value |
Meaning |
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选项(option) |
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 |
分段重组时生存周期(TTL)过期 |
IP_PARAM_PROBLEM 11015 |
一个参数有问题 |
IP_SOURCE_QUENCH 11016 |
数据报到达太快处理不过来, 并且数据报可能已被丢弃. |
IP_OPTION_TOO_BIG 11017 |
一个IP选项(option)被舍得过大. |
IP_BAD_DESTINATION 11018 |
一个有问题的目的地. |
IP_GENERAL_FAILURE 11050 |
常规错误. 当某些ICMP数据报格式不正确时可能会收到此错误. |
Type: ULONG
往返时间,单位毫秒
Type: USHORT
应答数据大小,单位byte
Type: USHORT
系统保留.
Type: PVOID
应答数据
Type: structip_option_information
应答数据的IP标头中的IP选项(options),格式为IP_OPTION_INFORMATION . 内涵TTL等信息.
IcmpParseReplies()分析ICMP_ECHO_REPLY得到IPv4 请求的应答数据. 64位平台对应ICMP_ECHO_REPLY32.
对于IPv4,成员Status 的组合方式遵循RFC 792.
GetIpErrorString()用于根据对应于IP_STATUS中的错误状态,检索IP helper失败描述信息
ICMP_ECHO_REPLY结构定义在Ipexport.h在中,而Ipexport.h被自动包含在Iphlpapi.h中.头文件Ipexport.h不应被直接使用.
Minimum supported client |
Windows 2000 Professional [desktop apps only] |
Minimum supported server |
Windows 2000 Server [desktop apps only] |
Header |
Ipexport.h (include Iphlpapi.h) |
IP_OPTION_INFORMATION结构体存放了IP标头中的配置选项(options)
typedef struct ip_option_information { UCHAR Ttl; UCHAR Tos; UCHAR Flags; UCHAR OptionsSize; PUCHAR OptionsData; } IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION;
类型: UCHAR
在IPv4报头中表示生存周期字段.在IPv6报头中表示跳数限制(HopLimit)字段
类型: UCHAR
在IPv4中表示服务类型字段.该成员目前正被忽略.
类型: UCHAR
标志字段.在IPv4中这个标志包含在报头中.在IPv6中这个字段表示为选项(options)头
对于IPv4,Flags 可以是下列值的组合,它们都定义在Ipexport.h中:
Value |
Meaning |
IP_FLAG_REVERSE 0x01 |
使IP包添加到源IP路由表头中. 仅适用于Vista及以上版本. |
IP_FLAG_DF 0x02 |
表示IP包不应被分段. |
类型: UCHAR
IP选项数据大小,单位bytes.
类型: PUCHAR
选项(options)数据.
IP_OPTION_INFORMATION表示IP报头中的选项(options).在64位平台上,对应IP_OPTION_INFORMATION32.
TTL, TOS 和 Flags对应于IP报头的特定字段.
OptionsData对应于紧随标准IP报头的options中.
除了IPv4的源路由选项(options)以外,选项(options)数据必须遵循RFC 791协议在链路中按照指定格式发送.一个IPv4源路由选项(option)应该包含从第一跳到目的地的完整路由.
对于IPv6,选项(options)数据必须遵循RFC 2460协议在链路上按照指定格式发送.
IP_OPTION_INFORMATION是ICMP_ECHO_REPLY的一个成员,它在IcmpSendEcho, IcmpSendEcho2,和 Icmp6SendEcho2中都有应用.
该结构体定义在Ipexport.h中,而Ipexport.h包含在Iphlpapi.h中.Ipexport.h头文件不应直接使用.
Minimum supported client |
Windows 2000 Professional [desktop apps only] |
Minimum supported server |
Windows 2000 Server [desktop apps only] |
Header |
Ipexport.h (include Iphlpapi.h) |