Diese Frage kann als eine Schwesterfrage von previous one von mir selbst behandelt werden. Es ist sehr mühsam, wenn Sie eine Link-Local-Adresse an einen IPv6-Socket binden wollen, müssen Sie das sin6_scope_id
Feld der -Struktur festlegen. Ich frage mich, ob jemand nach bewährter Praxis eine Lösung anbieten kann.wie man eine lokale Linkadresse an einen ipv6-Socket bindet
Antwort
Die IPv6 Link-lokale Adresse ist nicht eindeutig auf dem Knoten, sie ist nur für die NIC eindeutig, weshalb Sie die Scope-ID angeben müssen. Mit anderen Worten, es ist durchaus zulässig, mehrere Adapter mit genau der gleichen IPv6-Adresse zu haben.
Dies bedeutet, dass Sie die Scope-ID oder eine geeignete Textform (% eth0,% 1), die Sie an getaddrinfo()
übergeben können, als Eingabe übernehmen.
Eine Methode besteht darin, eine IPv6-Link-lokale Adresse aufzunehmen, die Schnittstellen aufzulisten und wenn nur eine übereinstimmt, wenn mehr als eine Übereinstimmung dann mit einer Liste von Schnittstellen bail out und den Benutzer dazu bringen, den zu spezifizieren vollständige Form.
Das Problem tritt nur auf, wenn Sie eine Link-lokale Adresse fest codieren, was keine praktische Lösung für eine nichttriviale App ist.
Andernfalls sollten Sie Ihre sockaddr
bekommen von getifaddrs()
zu binden, die den Umfang id ausfüllen wird für Sie (z. B. Sie Ihren Benutzerschnittstellennamen angeben lassen, dann durch die Liste von getifaddrs()
zurück Suche zu finden die verbindungslokale Adresse, die dieser Schnittstelle zugeordnet ist).
Für IPv6-Link-Local-Adressen (fe80::/10
Präfix), das sin6_scope_id
Mitglied in der Struktur ist die Schnittstellennummer und Sie diese Nummer von
if_nametoindex(const char *ifname);
- 1. Wie bindet man eine Liste an dataGridView?
- 2. Wie man einen Socket an mehrere Schnittstellen bindet
- 3. Wie bindet man einen Schlüssel an sigkill in bash?
- 4. Wie bindet man einen benutzerdefinierten Typ an TextBox.Text?
- 5. Wie bindet man einen Fensterhintergrund an die Hintergrundfarbe eines Themas?
- 6. Wie bindet man eine Liste an eine Combobox? (WinForms)
- 7. Wie bindet man in XAML an einen dynamischen XPath?
- 8. Wie man Lenker an willkürliche Eigenschaft bindet?
- 9. Wie bindet man eine DataGridViewComboBoxColumn an ein Objekt?
- 10. AngularJS: Wie man ein konstantes Objekt an eine Direktive bindet
- 11. Wie bindet man DataGrid an mehrere Sammlungen?
- 12. Wie bindet man rx_tap (UIButton) an ViewModel?
- 13. Wie bindet man jQuery an EINEN Link <a> an eine Onclick-Funktion?
- 14. Wie bindet man eine statische Objective-C-Bibliothek an Xamarin.iOS?
- 15. Wie man eine Funktion an Element bindet geladen über Ajax
- 16. Wie man eine Anweisung var an den Controller bindet
- 17. SAPUI5 - Wie man Odata $ an eine XML-Ansicht bindet
- 18. Wie bindet man eine Listview MaxHeight an die aktuelle Fensterhöhe?
- 19. Wie man einen Befehl in WPF bindet
- 20. Twisted: Wie bindet man einen Server an eine bestimmte IP-Adresse?
- 21. Wie bindet man einen Wert an eine Variable mit ng-init in einer ng-Wiederholung?
- 22. Wie bindet man einen raw_socket an eine bestimmte Schnittstelle im Kernelspace?
- 23. Wie bindet man einen Prozess an einen bestimmten Kern in freebsd/linux
- 24. Komplexes Modell, das an eine Liste bindet
- 25. Wie man durch Ansammlung bindet?
- 26. wie man einen boolean zu Combobox in wpf bindet
- 27. Wie man ein Textfeld an Listview SelectedItem und an eine Eigenschaft bindet
- 28. Wie man 2-Wege-Zahlen numerisch an Android bindet editText
- 29. Wie bindet man ein Element an das Hintergrundbild (responsive)?
- 30. Wie man maven antrun plugin an die saubere Phase bindet
Die Link-lokaler Adresse gebildet wird aus seinem Routing-Präfix bekommen und die MAC-Adresse der Schnittstelle. Wenn also mehrere Adapter auf demselben Host verfügbar sind, hat jeder Netzwerkadapter eine andere verbindungslokale Adresse. – zeekvfu
@Zind Sie nehmen fälschlicherweise an, dass jede Schnittstelle eine eindeutige MAC-Adresse hat. Ein Gegenbeispiel finden Sie unter Sun-Hardware. –