linux-OSX上具有“嵌入式”范围的IPv6链接本地地址
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-OSX上具有“嵌入式”范围的IPv6链接本地地址,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2187字,纯文字阅读大概需要4分钟。
内容图文
![linux-OSX上具有“嵌入式”范围的IPv6链接本地地址](/upload/InfoBanner/zyjiaocheng/948/47c3f550859c4b62bc733f442d85de74.jpg)
我编写了一些简单的代码,这些代码使用ioctl SIOCGIFCONF查询系统上的所有网络接口,并使用inet_ntop返回找到的地址的文本表示形式.奇怪的是,当发现本地链接的IPv6地址时,代码的OSX版本似乎将作用域嵌入了该地址.
这是OSX上/ sbin / ifconfig中自动配置接口后的一行(:
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
ether 00:17:f2:0b:52:73
inet6 fe80::217:f2ff:fe0b:5273%en1 prefixlen 64 scopeid 0x5
以及ioctl SIOCGIFCONF返回的IP地址:
IPv6地址:fe80:5 :: 217:f2ff:fe0b:5273
似乎在fe80之后立即插入了作用域(5)的值.
Linux上的相同代码将返回ipv6地址,而不会包含任何其他数据.
我想到两个问题:
1)编写这样的ipv6地址是否合法?
2)OSX行为是否记录在任何地方?
请参考!
解决方法:
我不确定第二个问题,但是对于第一个问题,是的,常见的是看到这样写的IPv6地址(例如链接本地地址)在很大范围内,但在各个平台上肯定不一致.原因是因为没有它,链接本地地址将不明确.
我对this other question的回答可能会有所帮助.
编辑:我刚刚意识到这个问题的微妙之处. BSD IPv6堆栈在内部将接口索引存储在链接本地IPv6地址的第2个16位字中.这永远都不会消失.它实际上是违反RFC的because link-local addresses are defined to have 0 bits in this area.(顺便说一句,这就是为什么他们可以在这里保存额外的信息的原因)我相信这是一个错误,并且应该将范围真正以其他方式传达给系统的其余部分.因此,您可能应该检查一下并用手将其剥离.
编辑2:我去挖了place in the kernel source where they set this value:
466 static int
467 in6_ifattach_linklocal(
468 struct ifnet *ifp,
469 struct ifnet *altifp, /* secondary EUI64 source */
470 struct in6_aliasreq *ifra_passed)
471 {
...
494 ifra.ifra_addr.sin6_family = AF_INET6;
495 ifra.ifra_addr.sin6_len = sizeof(struct sockaddr_in6);
496 ifra.ifra_addr.sin6_addr.s6_addr16[0] = htons(0xfe80);
497 #if SCOPEDROUTING
498 ifra.ifra_addr.sin6_addr.s6_addr16[1] = 0
499 #else
500 ifra.ifra_addr.sin6_addr.s6_addr16[1] = htons(ifp->if_index); /* XXX */
501 #endif
注意第500行上的/ * XXX * /.;-)我的猜测是,这是某种临时性的变通方法/黑客,它可以使路由正确运行而无需重写部分路由代码.使用本地链接地址,您将需要根据源接口和目标接口做出路由决策.通过将if_index放置在地址中的该位置,它们可能仅在128位地址上进行最长的前缀匹配,而不必依赖某种元数据.
内容总结
以上是互联网集市为您收集整理的linux-OSX上具有“嵌入式”范围的IPv6链接本地地址全部内容,希望文章能够帮你解决linux-OSX上具有“嵌入式”范围的IPv6链接本地地址所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。