这个问题可以看作是我自己发布的previous one的姐妹问题。当您想要将链路本地地址绑定到IPv6套接字时,您需要设置结构的sin6_scope_id
字段,这非常枯燥。我想知道是否有人可以按照良好的做法提供解决方案。如何将一个链接本地地址绑定到一个ipv6套接字
7
A
回答
10
IPv6链接本地地址在节点上不唯一,它只是NIC唯一的,这就是为什么您必须指定范围ID。换句话说,具有完全相同的IPv6地址的多个适配器是完全有效的。
这意味着您应该输入范围代码或合适的文本形式(%eth0,%1),您可以将其传递给getaddrinfo()
。
一种方法是引入IPv6链接本地地址,枚举接口,如果只有一个匹配使用该接口,如果多于一个匹配,则使用接口列表进行救援,并让用户指定哪一个完整形式。
3
该问题仅出现在硬编码链接本地地址时,对于非平凡应用程序来说这不是一个真正实用的解决方案。
否则,你应该让你的sockaddr
从getifaddrs()
绑定,这将填好的范围ID为您(例如,你可以让你的用户指定接口名称,然后搜索通过getifaddrs()
返回的列表中找到与该接口关联的链路本地地址)。
3
对于IPv6链路本地地址(fe80::/10
前缀),该sin6_scope_id
成员在结构是端口号,可以通过
if_nametoindex(const char *ifname);
相关问题
- 1. 将套接字绑定到IPv6地址
- 2. 将IPv4和IPv6源地址绑定到python套接字
- 3. 为什么我不能IPv6套接字绑定到一个LINKLOCAL地址
- 4. 如何在同一接口上绑定多个IPv6地址时将特定IP设置为套接字
- 5. IPv6链接本地地址格式
- 6. 如何动态地将套接字绑定到一个网络接口?
- 7. 如何将本地ipv6地址绑定到我的node.js程序?
- 8. 如何将套接字绑定到Android上的本地wifi网络地址?
- 9. 使用本地ipv6套接字发送UDP到本地ipv4地址
- 10. 如何找到一个套接字的IP地址C++/C
- 11. PHP:TCP套接字,'无法绑定地址'
- 12. Java:套接字可以在绑定IPv4地址的情况下连接到IPv6地址吗?
- 13. 将套接字连接到设备上的本地地址
- 14. 将Jetty绑定到IPv6地址
- 15. 套接字,如何找到与INADDR_ANY绑定时的本地地址
- 16. 如何将本地端点绑定到套接字?
- 17. 如何使用TCPv6将套接字绑定到本地用户
- 18. 将原始套接字绑定到特定地址
- 19. 什么是套接字绑定以及如何绑定地址?
- 20. getaddrinfo为ipv6链接本地
- 21. 将40个套接字绑定到40个不同的IP地址
- 22. 如何计算下一个ipv6地址?
- 23. 在perl的MAC地址到IPv6链接本地地址在线转换
- 24. IN6ADDR_ANY_INIT可以自动绑定到链接本地地址吗?
- 25. 哪个函数告诉我内核绑定本地套接字的地址?
- 26. 为什么要将套接字绑定到地址?
- 27. 如何将本地unix套接字映射到inet套接字?
- 28. 如何将多个接口绑定到一个原始套接字
- 29. 如何使用C套接字监听所有IPV6地址API
- 30. 绑定UDP套接字连接到特定的本地端点
链路本地地址是从它的路由前缀构成拿到这个号码和接口的MAC地址。因此,如果同一主机上有多个适配器可用,则每个网络适配器都有不同的链路本地地址。 – zeekvfu 2013-08-21 10:13:28
@Zind您错误地认为每个接口都有唯一的MAC地址。请参阅Sun硬件的反例。 – 2013-08-21 14:34:52