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 RoundTripTime;
USHORT DataSize;
USHORT Reserved;
PVOID Data;
struct ip_option_information Options;
} ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY;
成员
Address
Type: IPAddr
响应的IPv4地址,IPAddr 格式.
Status
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数据报格式不正确时可能会收到此错误. |
RoundTripTime
Type: ULONG
往返时间,单位毫秒
DataSize
Type: USHORT
应答数据大小,单位byte
Reserved
Type: USHORT
系统保留.
Data
Type: PVOID
应答数据
Options
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 structure
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;
成员
Ttl
类型: UCHAR
在IPv4报头中表示生存周期字段.在IPv6报头中表示跳数限制(HopLimit)字段
Tos
类型: UCHAR
在IPv4中表示服务类型字段.该成员目前正被忽略.
Flags
类型: UCHAR
标志字段.在IPv4中这个标志包含在报头中.在IPv6中这个字段表示为选项(options)头
对于IPv4,Flags 可以是下列值的组合,它们都定义在Ipexport.h中:
Value | Meaning |
IP_FLAG_REVERSE 0x01 | 使IP包添加到源IP路由表头中. 仅适用于Vista及以上版本. |
IP_FLAG_DF 0x02 | 表示IP包不应被分段. |
OptionsSize
类型: UCHAR
IP选项数据大小,单位bytes.
OptionsData
类型: 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) |