gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:56 31 4
gpt4 key购买 nike

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

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

考虑到IP地址在不同平台的字节顺序,每次都写这么一个普通的小函数是很容易出错的。所以我认为应该有一个库函数,是吗?

最佳答案

这会让你开始。我没有费心包括“链接本地”地址范围,但这是留给您通过修改下面的代码来完成的练习。

IPV6 略有不同。而且您的问题有点格式错误,因为大多数系统没有 native 128 位类型。 IPv6 地址通常包含在 sockaddr_in6 结构中的 16 字节数组中。

完成这个例子你需要知道的一切都在this link here。 .

// 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.x.y.z
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;
}

关于c++ - 是否有库函数来确定 IP 地址(IPv4 和 IPv6)在 C/C++ 中是私有(private)的还是本地的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293095/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com