這個問題可以看作是我自己發佈的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