欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

自制Ping(2) Structures

程序员文章站 2022-06-07 18:32:15
...

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 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_INFORMATIONICMP_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)