ParseNetworkString 函数 (iphlpapi.h)

ParseNetworkString 函数分析输入网络字符串,并检查它是否是指定 IP 网络字符串类型的合法表示形式。 如果字符串与类型及其规范匹配,函数可以选择返回分析的结果。

语法

IPHLPAPI_DLL_LINKAGE DWORD ParseNetworkString(
  [in]            const WCHAR       *NetworkString,
  [in]            DWORD             Types,
  [out, optional] PNET_ADDRESS_INFO AddressInfo,
  [out, optional] USHORT            *PortNumber,
  [out, optional] BYTE              *PrefixLength
);

parameters

[in] NetworkString

指向要分析的以 NULL 结尾的网络字符串的指针。

[in] Types

要分析的 IP 网络字符串的类型。 此参数由 Iphlpapi.h 头文件中定义的网络字符串类型之一组成。

含义
NET_STRING_IPV4_ADDRESS
0x00000001
NetworkString 参数使用 Internet 标准点十进制表示法指向 IPv4 地址。 网络字符串中不可包含网络端口和前缀。

下面是一个示例网络字符串:

192.168.100.10

NET_STRING_IPV4_SERVICE
0x00000002
NetworkString 参数使用 Internet 标准点十进制表示法指向 IPv4 服务。 网络字符串中需要一个网络端口。 网络字符串中不得存在前缀。

下面是一个示例网络字符串:

192.168.100.10:80

NET_STRING_IPV4_NETWORK
0x00000004
NetworkString 参数使用 Internet 标准点十进制表示法指向 IPv4 网络。 需要在网络字符串中包含使用无类别域际路由 (CIDR) 表示法的网络前缀。 网络字符串中不可包含网络端口。

下面是一个示例网络字符串:

192.168.100/24

NET_STRING_IPV6_ADDRESS
0x00000008
NetworkString 参数使用 Internet 标准十六进制编码指向 IPv6 地址。 网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。

下面是一个示例网络字符串:

21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A%2

NET_STRING_IPV6_ADDRESS_NO_SCOPE
0x00000008
NetworkString 参数使用 Internet 标准十六进制编码指向 IPv6 地址。 网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。

下面是一个示例网络字符串:

21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A

NET_STRING_IPV6_SERVICE
0x00000020
NetworkString 参数使用 Internet 标准十六进制编码指向 IPv6 服务。 网络字符串中需要一个网络端口。 网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不得存在前缀。

具有范围 ID 的示例网络字符串如下:

[21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A%2]:8080

NET_STRING_IPV6_SERVICE_NO_SCOPE
0x00000040
NetworkString 参数使用 Internet 标准十六进制编码指向 IPv6 服务。 网络字符串中需要一个网络端口。 网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不得存在前缀。

下面是一个示例网络字符串:

21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A:8080

NET_STRING_IPV6_NETWORK
0x00000080
NetworkString 参数使用 Internet 标准十六进制编码指向 IPv6 网络。 网络字符串中需包含 CIDR 表示法中的网络前缀。 网络字符串中不可包含网络端口和范围 ID。

下面是一个示例网络字符串:

21DA:D3::/48

NET_STRING_NAMED_ADDRESS
0x00000100
NetworkString 参数使用域名系统 (DNS) 名称指向 Internet 地址。 网络字符串中不可包含网络端口和前缀。

下面是一个示例网络字符串:

www.microsoft.com

NET_STRING_NAMED_SERVICE
0x00000200
NetworkString 参数使用 DNS 名称指向 Internet 服务。 网络字符串中必须存在网络端口。

下面是一个示例网络字符串:

www.microsoft.com:80

NET_STRING_IP_ADDRESS
0x00000009
NetworkString 参数使用 Internet 标准点十进制表示法指向 IPv4 地址或使用 Internet 标准十六进制编码的 IPv6 地址。 网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。

此类型与 NET_STRING_IPV4_ADDRESSNET_STRING_IPV6_ADDRESS 类型匹配。

NET_STRING_IP_ADDRESS_NO_SCOPE
0x00000011
NetworkString 参数使用 Internet 标准点十进制表示法指向 IPv4 地址或使用 Internet 标准十六进制编码的 IPv6 地址。 网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。

此类型与 NET_STRING_IPV4_ADDRESSNET_STRING_IPV6_ADDRESS_NO_SCOPE 类型匹配。

NET_STRING_IP_SERVICE
0x00000022
NetworkString 参数指向 IPv4 服务或 IPv6 服务。 网络字符串中需要一个网络端口。 网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不得存在前缀。

此类型匹配 NET_STRING_IPV4_SERVICENET_STRING_IPV6_SERVICE 类型。

NET_STRING_IP_SERVICE_NO_SCOPE
0x00000042
NetworkString 参数指向 IPv4 服务或 IPv6 服务。 网络字符串中需要一个网络端口。 网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不得存在前缀。

此类型匹配 NET_STRING_IPV4_SERVICENET_STRING_IPV6_SERVICE_NO_SCOPE 类型。

NET_STRING_IP_NETWORK
0x00000084
NetworkString 参数指向 IPv4 或 IPv6 网络。 网络字符串中需包含 CIDR 表示法中的网络前缀。 网络中不得存在网络端口或范围 ID。

此类型匹配 NET_STRING_IPV4_NETWORKNET_STRING_IPV6_NETWORK 类型。

NET_STRING_ANY_ADDRESS
0x00000209
NetworkString 参数指向 Internet 标准点十进制表示法中的 IPv4 地址、Internet 标准十六进制编码中的 IPv6 地址或 DNS 名称。 IPv6 地址的网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。

此类型与 NET_STRING_NAMED_ADDRESSNET_STRING_IP_ADDRESS 类型匹配。

NET_STRING_ANY_ADDRESS_NO_SCOPE
0x00000211
NetworkString 参数指向 Internet 标准点十进制表示法中的 IPv4 地址、Internet 标准十六进制编码中的 IPv6 地址或 DNS 名称。 IPv6 地址的网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。

此类型匹配 NET_STRING_NAMED_ADDRESSNET_STRING_IP_ADDRESS_NO_SCOPE 类型。

NET_STRING_ANY_SERVICE
0x00000222
NetworkString 参数使用 IP 地址表示法或 DNS 名称指向 IPv4 服务或 IPv6 服务。 网络字符串中需要一个网络端口。 网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不得存在前缀。

此类型匹配 NET_STRING_NAMED_SERVICENET_STRING_IP_SERVICE 类型。

NET_STRING_ANY_SERVICE_NO_SCOPE
0x00000242
NetworkString 参数使用 IP 地址表示法或 DNS 名称指向 IPv4 服务或 IPv6 服务。 网络字符串中需要一个网络端口。 网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不得存在前缀。

此类型匹配 NET_STRING_NAMED_SERVICENET_STRING_IP_SERVICE_NO_SCOPE 类型。

[out, optional] AddressInfo

成功后,如果此参数中未传递 NULL 指针,函数将返回指向包含已分析 IP 地址信息的NET_ADDRESS_INFO结构的指针。

[out, optional] PortNumber

成功后,如果此参数中未传递 NULL 指针,则函数将返回一个指针,该指针将按主机顺序返回指向已分析的网络端口。 如果 NetworkString 参数中不存在网络端口,则返回指向零值的指针。

[out, optional] PrefixLength

成功后,如果此参数中未传递 NULL 指针,函数将返回指向已分析前缀长度的指针。 如果 NetworkString 参数中不存在前缀,则返回指向值 -1 的指针。

返回值

如果函数成功,则返回值为 ERROR_SUCCESS。

如果函数失败,则返回值为以下错误代码之一。

返回代码 说明
ERROR_INSUFFICIENT_BUFFER
传递给函数的缓冲区太小。 如果 AddressInfo 参数指向的缓冲区太小而无法保存分析的网络地址,则返回此错误。
ERROR_INVALID_PARAMETER
向该函数传递了无效参数。 如果在 NetworkString 参数中传递 NULL 指针,则返回此错误

注解

ParseNetworkString 函数分析在 NetworkString 参数中传递的输入网络字符串,并检查它是否是 Types 参数中指定的其中一种字符串类型的合法表示形式。 如果字符串与类型及其规范匹配,则该函数会成功,并且当这些参数不是 NULL 指针时,可以选择将分析的结果返回给可选 AddressInfoPortNumberPrefixLength 参数中的调用方。

ParseNetworkString 函数可以使用 DNS 名称分析 IPv4 或 IPv6 地址、服务和网络的表示形式,以及命名的 Internet 地址和服务。

AddressInfo 参数指向的NET_ADDRESS_INFO结构。 SOCKADDR_IN 和 SOCKADDR 结构在 Winsock2.h 头文件自动包含的 Ws2def.h 头文件中定义。 SOCKADDR_IN6 结构在 Ws2ipdef.h 头文件中定义,该文件由 Ws2tcpip.h 头文件自动包含。 若要使用 ParseNetworkString 函数和 NET_ADDRESS_INFO 结构, Winsock2.hWs2tcpip.h 头文件必须包含在 Iphlpapi.h 头文件之前。

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 iphlpapi.h
Library Iphlpapi.lib
DLL Iphlpapi.dll

另请参阅

NET_ADDRESS_FORMAT

NET_ADDRESS_INFO

SOCKADDR

SOCKADDR_IN

SOCKADDR_IN6