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_ADDRESS 或 NET_STRING_IPV6_ADDRESS 类型匹配。
|
- NET_STRING_IP_ADDRESS_NO_SCOPE
- 0x00000011
|
NetworkString 参数使用 Internet 标准点十进制表示法指向 IPv4 地址或使用 Internet 标准十六进制编码的 IPv6 地址。
网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。
此类型与 NET_STRING_IPV4_ADDRESS 或 NET_STRING_IPV6_ADDRESS_NO_SCOPE 类型匹配。
|
- NET_STRING_IP_SERVICE
- 0x00000022
|
NetworkString 参数指向 IPv4 服务或 IPv6 服务。
网络字符串中需要一个网络端口。 网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不得存在前缀。
此类型匹配 NET_STRING_IPV4_SERVICE 或 NET_STRING_IPV6_SERVICE 类型。
|
- NET_STRING_IP_SERVICE_NO_SCOPE
- 0x00000042
|
NetworkString 参数指向 IPv4 服务或 IPv6 服务。
网络字符串中需要一个网络端口。 网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不得存在前缀。
此类型匹配 NET_STRING_IPV4_SERVICE 或 NET_STRING_IPV6_SERVICE_NO_SCOPE 类型。
|
- NET_STRING_IP_NETWORK
- 0x00000084
|
NetworkString 参数指向 IPv4 或 IPv6 网络。
网络字符串中需包含 CIDR 表示法中的网络前缀。 网络中不得存在网络端口或范围 ID。
此类型匹配 NET_STRING_IPV4_NETWORK 或 NET_STRING_IPV6_NETWORK 类型。
|
- NET_STRING_ANY_ADDRESS
- 0x00000209
|
NetworkString 参数指向 Internet 标准点十进制表示法中的 IPv4 地址、Internet 标准十六进制编码中的 IPv6 地址或 DNS 名称。
IPv6 地址的网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。
此类型与 NET_STRING_NAMED_ADDRESS 或 NET_STRING_IP_ADDRESS 类型匹配。
|
- NET_STRING_ANY_ADDRESS_NO_SCOPE
- 0x00000211
|
NetworkString 参数指向 Internet 标准点十进制表示法中的 IPv4 地址、Internet 标准十六进制编码中的 IPv6 地址或 DNS 名称。
IPv6 地址的网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不可包含网络端口和前缀。
此类型匹配 NET_STRING_NAMED_ADDRESS 或 NET_STRING_IP_ADDRESS_NO_SCOPE 类型。
|
- NET_STRING_ANY_SERVICE
- 0x00000222
|
NetworkString 参数使用 IP 地址表示法或 DNS 名称指向 IPv4 服务或 IPv6 服务。
网络字符串中需要一个网络端口。 网络字符串中可能存在 IPv6 范围 ID。 网络字符串中不得存在前缀。
此类型匹配 NET_STRING_NAMED_SERVICE 或 NET_STRING_IP_SERVICE 类型。
|
- NET_STRING_ANY_SERVICE_NO_SCOPE
- 0x00000242
|
NetworkString 参数使用 IP 地址表示法或 DNS 名称指向 IPv4 服务或 IPv6 服务。
网络字符串中需要一个网络端口。 网络字符串中不得存在 IPv6 范围 ID。 网络字符串中不得存在前缀。
此类型匹配 NET_STRING_NAMED_SERVICE 或 NET_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 指针时,可以选择将分析的结果返回给可选 AddressInfo、PortNumber 和 PrefixLength 参数中的调用方。
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.h 和 Ws2tcpip.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