这个问题可以看作是我自己发布的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. 将IPv4和IPv6源地址绑定到python套接字
- 2. 为什么我不能IPv6套接字绑定到一个LINKLOCAL地址
- 3. 如何在同一接口上绑定多个IPv6地址时将特定IP设置为套接字
- 4. IPv6链接本地地址格式
- 5. 如何动态地将套接字绑定到一个网络接口?
- 6. 如何将套接字绑定到Android上的本地wifi网络地址?
- 7. PHP:TCP套接字,'无法绑定地址'
- 8. 将套接字连接到设备上的本地地址
- 9. 如何使用TCPv6将套接字绑定到本地用户
- 10. 什么是套接字绑定以及如何绑定地址?
- 11. 在perl的MAC地址到IPv6链接本地地址在线转换
- 12. 如何计算下一个ipv6地址?
- 13. IN6ADDR_ANY_INIT可以自动绑定到链接本地地址吗?
- 14. 哪个函数告诉我内核绑定本地套接字的地址?
- 15. 为什么要将套接字绑定到地址?
- 16. 如何将本地unix套接字映射到inet套接字?
- 17. 如何将多个接口绑定到一个原始套接字
- 18. 如何使用C套接字监听所有IPV6地址API
- 19. 是否可以将套接字绑定到c中的2个地址?
- 20. OSX上具有'嵌入'范围的IPv6链接本地地址
- 21. 每个套接字地址地址(python selenium)只有一个用法
- 22. 套接字只接受特定地址?
- 23. IPV6唯一本地地址和站点本地地址
- 24. 接口是否可以有多个IPv6链路本地ULA公用地址?
- 25. 无法绑定到IPv6地址
- 26. Mysql:使用每个套接字地址
- 27. Python套接字 - 我将它绑定到IP后如何获取套接字的IP地址
- 28. 清漆在同一接口上侦听多个IPv6地址
- 29. 如何提取本地计算机站点本地和链接Delphi中的本地IPv6地址?
链路本地地址是从它的路由前缀构成拿到这个号码和接口的MAC地址。因此,如果同一主机上有多个适配器可用,则每个网络适配器都有不同的链路本地地址。 – zeekvfu 2013-08-21 10:13:28
@Zind您错误地认为每个接口都有唯一的MAC地址。请参阅Sun硬件的反例。 – 2013-08-21 14:34:52