最近在最近的一个 linux 发行版中发现了一个新行为,其中getnameinfo(..,NI_NUMERICHOST)
在双栈套接字上返回一个 IPv4 映射的 IPv6 地址,带有一个范围标识符::ffff:x.x.x.x%yyyyyyyyy
而不是::ffff:x.x.x.x
这种新行为导致现有应用程序出现一些问题,这些应用程序似乎使用字符串解析从 IPv4 映射的 IPv6 地址中提取 IPv4 地址。没有其他经过测试的操作系统可以做到这一点,包括稍早版本的 linux。
我理解的映射地址将被视为具有全局范围,因此不应具有范围 ID。此外,我不知道故意这样做有什么意义……IPv4中不存在范围ID。这是合法行为还是网络堆栈中的回归?