是否有库函数来确定IP地址(IPv4和IPv6)在C / C ++中是私有/本地的?

1,给定一个32位整数值,如何准确判断它是否是私有IPv4地址。

2,给定一个128位整数值,如何准确判断它是否是私有IPv6地址。

考虑不同平台上IP地址的字节顺序,每次都要编写这样一个常见的小函数是容易出错的。 所以我认为应该有一个库函数,有吗?

这将帮助您入门。 我没有打扰包括“链接本地”地址范围,但这是一个练习,您可以通过修改下面的代码来完成。

IPV6略有不同。 由于大多数系统没有本机128位类型,因此您的问题稍有不完整。 IPv6地址通常包含在sockaddr_in6结构中的16字节数组中。

完成此示例所需的一切都在此处链接 。

// assumes ip is in HOST order. Use ntohl() to convert as approrpriate bool IsPrivateAddress(uint32_t ip) { uint8_t b1, b2, b3, b4; b1 = (uint8_t)(ip >> 24); b2 = (uint8_t)((ip >> 16) & 0x0ff); b3 = (uint8_t)((ip >> 8) & 0x0ff); b4 = (uint8_t)(ip & 0x0ff); // 10.xyz if (b1 == 10) return true; // 172.16.0.0 - 172.31.255.255 if ((b1 == 172) && (b2 >= 16) && (b2 <= 31)) return true; // 192.168.0.0 - 192.168.255.255 if ((b1 == 192) && (b2 == 168)) return true; return false; }